AWS デプロイする時に詰まったところ1

やっぱDB関連で詰まるんだなぁと思った。

 

最初は紐付けたはずのElastic IPにアクセスしても接続拒否だった

ポート解放出来てないのかと思ってhttpsの解放もしたけど駄目だった

 http://<Elastic IP>:3000/にきちんとアクセスしてなかった

:3000/を指定しないとアプリのルートにならないし、elasticIPの部分は<>つけない

(ただしnginxの設定まで終わったら:3000/の部分はつけない)

the page you're looking for doesn't exit的なページになった

そういやheorkuの時もみたエラーだけど、その時もページが無いんじゃなくてトップページに必要なデータをseedしてないのが原因だったな、と思いseedしようとした

bundle exec rake db:seedでmysqlのソケットがエラーになったり、Access deniedになったりしたので、database.ymlの記述がおかしいのかな?とソケットの記述を書き直したり、passwordがNoになってたので手当たり次第環境変数読み込みの記述したりしてた。ここが一番詰まった。ちょうどsecrets.ymlがcredentials.yml.encになったタイミングで、そのあたりの設定も疑ったりしたが、リモートの環境変数書く場所(/etc/environment)の中には適切な環境変数はあったし、mysqlmysql -u root -pではちゃんとパスワード求められて、正しく設定できるようだったのでそのあたりはあまり関係なかったっぽい

結論

RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

で起動しただけでmysqlのコマンドも本番環境を指すのかと思ってしまい、

bundle exec rake db:hogehoge でやっていたのが間違い

恐らくそのせいでdatabase.ymlのdefaultの設定を読み込んでいた

正しくは

rails db:create RAILS_ENV=production

と記述しないといけない。つまり本番環境の指定が必要。

他のコマンドもこれで打つ。dropだけはもう一回これつけて打ってみたいなこと求められるが、RAILS_ENV=productionをつけることで普通にrails db:コマンド打てるようになる。

 

 

それと時間経つと忘れそうなことメモ

アプリkillする時はunicornのマスターのプロセスkillする

アセットのプリコンパイルするコマンドは

rails assets:precompile RAILS_ENV=production

 

 これも本番用って感じのコマンドだね。本番モードでは事前にコマンドでアセットプリコンパイルする必要があるので忘れないように。unicorn立ち上げる時の

RAILS_SERVE_STATIC_FILES=1の指定も忘れないようにね。これないとコンパイルされたファイルをunicornが見つけられないらしい。

 

あと普通にlsとか使いながらlogファイルどこにあるか確認してproduction.logとかunicornのlog書き出されるファイルとかをcatとかlessとかで覗きながら、必要ならviで設定編集したりps aux | grepでプロセス探してkillしたりまぁがんばれって感じ

 

あと自動デプロイ設定まで終わってローカルから

bundle exec cap production deploy

 しようとすると,ssh関連のエラー出るから注意

https://qiita.com/aoitrain/items/90036ec9c24f0566711e

まぁ仕様っぽい