ローカル環境で問題なく動いたアプリを自動デプロイした際に、本番環境でエラーが出てしまいビューが表示されない
となると何をして良いかわからず絶望的な気持ちになりますよね。。。
そんな時に解決方法の一つとして是非お試しください。
#結論: drop,createは手動で、migrateは自動で
ec2にログインをし、手動でコマンドを打ちデータベースのdrop,createだけを行います。
その後、Capistranoの自動デプロイでmigrateをさせるという方法でページが表示できるようになりました。
#コマンド
ec2にログインをしたら、まずは以下のコードを実行し、本番環境上でのデータベースの削除、作成までを行いましよう。
cd /var/www/<%アプリケーション名%>
cd current
rails db:drop RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1
rails db:create RAILS_ENV=production
その後、unicorn、mysqlの再起動も行います。(右側に長いコードです)
ps aux |grep unic
//実行結果(番号は異なります)
ec2-user 24327 0.1 11.5 504288 116388 ? Sl 22:46 0:02 unicorn master -c /var/www/<%アプリケーション名%>/current/config/unicorn.rb -E production -D
ec2-user 24334 0.0 12.3 651728 124368 ? Sl 22:46 0:00 unicorn worker[0] -c /var/www/<%アプリケーション名%>/current/config/unicorn.rb -E production -D
kill -9 24327 //masterのプロセス番号24327を入力
sudo service mysqld restart //mysqlを再起動
最後にローカルのターミナルに戻り自動デプロイ
マイグレーションはこの時点で行われます。
bundle exec cap production deploy
完了です!
#まとめ
特に特殊な操作は行なっていませんが、capistranoのmigrate機能を利用するという所がミソですね。
なぜこれでうまく行ったかはわかりませんが、これからも本番環境でのエラーは色々と試行をする必要がありそうです。。。