この記事について
この記事では、自身がRailsで開発しているアプリをCapistranoでデプロイをしようとした時にエラーが発生し、解決するまでに試した作業を書いています。
同様のエラーが起きた際に自分が読み返すために書いていますが、他の方の参考にもなれば嬉しいです。
エラーが起こった時の状況
Capistranoでデプロイの流れを自動化しており、ある日デプロイをしようとしたところ、deploy:migrating実行時にエラーが発生し、デプロイができませんでした。
ローカル環境では動作に問題がなかったため、サーバー環境に問題があると考えました。
エラー解決までに行った作業
- AWSサービスの再起動
- unicornの再起動
- nginxの再起動
- MySQLの再起動
こうして書いてみると、ひたすら再起動しているだけのような気がしてきました。
1.AWSサービスの再起動
amazonコンソールからサインインし、EC2インスタンスの管理画面を開きます。
該当するアプリが選択された状態で、「アクション→インスタンスの状態→停止」、「アクション→インスタンスの状態→開始」の順で行います。
再起動を選択しても良さそうですが、学習のために開発中のアプリであることと、再起動で上手く行かなかった時に停止→開始とやり直すのが面倒だったため、今回は最初から停止→開始の作業を行いました。
他のアプリを開発中にも直面しましたが、解決策が分からない時にインスタンスの再起動を行うとあっさり解決することがあったりします。
2.unicornの再起動
以降はコンソールからサーバーにログインした上で作業を行います。cd /var/www/アプリ名などを実行し、アプリが保存されているフォルダに移動してから作業してください。
ps aux | grep unicorn # 起動中のunicornプロセスを確認
# 起動中のunicorn master -c ...がある場合、停止させる
kill 0000 #上記で確認したプロセス番号を入力
RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
3.nginxの再起動
# nginxの停止
sudo service nginx stop
# nginxの開始
sudo service nginx start
# nginxの状況確認
sudo service nginx status
# -> nginx (pid 0000) is running...
4.MySQLの再起動
sudo service mysqld restart
# nginxと同様の作業でも再起動は可能
結果
以上の作業を行うことで、無事にデプロイが行えるようになりました。
上の作業を全て連続して行ったため、具体的にどの部分が原因でデプロイできなかったのかまでは分かりませんでした。ですが原因を追求するつもりもありませんでしたし、問題があった時の再起動は不都合がない限り全て行って差し支えないと考えます。