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)の中には適切な環境変数はあったし、mysqlもmysql -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
まぁ仕様っぽい