Help us understand the problem. What is going on with this article?

自動デプロイ後ローカルでいろいろ変更してデプロイしたらmigrationとunicornで詰まりデプロイできなかったので解決までの備忘録

自動デプロイでかなり詰まったので備忘録として残します。

  • 初学者のため理解が不足しているところがあり、解決の過程で必要のない工程をしている可能性があります。
  • もし他の改善策などご指摘いただけることがあればよろしくお願いしたします。

エラー過程①

  • 自動デプロイ完了後ローカルでデータベース構成などを変更
  • 変更後自動デプロイ実行する。
  • 途中でmigrationの実行で止る。

解決までの流れ①

  • 原因の仮説としてはローカルでデータベースのテーブルやカラムの変更を行いrails db:migrate:resetを行ったためだと仮定し本番のデータベースもリセットすることにした。

  • 関連の記事を探し、こちらで書かれているコードを参照、一度データベースを消してしまうという方法を取ってみたhttps://qiita.com/wacker8818/items/72d933f036ca0b75d124

  • 無事データベースは削除され、改めてデータベースの作成とマイグレーションを実行したが落とし穴に会う。

    • ローカルに戻りアプリケーションのディレクトリで、自動デプロイを実行したがまたもマイグレーションの実行部分でエラーが起きた。
    • 何故かなと思ったが、エラー内容としては、マイグレーションファイル読み込み時に、追加したいカラムがもうあるよ的なエラーでした。 - 理由は本番でデータベース削除の後にマイグレーションまで実行してしまったことだった。 - 考えてみれば当たり前の話なのだが、この時点ではまだ修正したマイグレーションファイルも反映していないので、古いマイグレーションファイルをマイグレートして、さらにローカルで新しいマイグレーションの読み込みを実行していたのだ。 - なのでもし修正した方のマイグレーションファイルに、前に作ったマイグレーションファイルの設定と同じ記述があればエラーが起きるのは当たり前になる。
  • なのでもう一度データベースを消してやり直ししてなんとかマイグレーションの自動デプロイは通った。

エラー過程②

  • ①通過後unicornstartでエラー発生し止る。

解決までの流れ②

ターミナル
master failed to start, check stderr log for details
# エラー文
  • エラー文を参考に調べた結果
    • このエラーの原因解決には(おそらく)本番環境でunicornのログを見てみるのが一番の近道らしいと聞いたので見てみる。
    • 何個かエラーらしきところは確認でき、どこのファイルのどこの行かまで詳しくログに書いてあったが簡単な記述ミスが起きているでけということで特にunicornが動かない原因だと考えなかった。
    • その後unicornのプロセスで見えないプロセスが裏で動いている可能性があると、指摘を受け調べてみたがその裏で動くプロセスの見方がわからなかった。
    • 詳しい方にいろいろ聞き本番環境のアプリケーションのディレクトリで下記のコマンドを実行。
ec2-user(appディレクトリ)
sudo vim shared/tmp/pids/unicorn.pid
  • vimファイルの一番上にpid番号らしき5桁の番号が保存されていたため直接消去しvimファイルを保存。

    • もう一度vimファイルを開いてちゃんと保存されているか確認。
    • これで解決できたと思いローカルに戻り自動デプロイを実行。
    • しかしまた同じunicorn実行の部分でエラーが起きた。
  • ここでもう原因がわからず悩んだが、一番エラーの原因として可能性が低いと思っていた、以前unicornログで見たエラーを解決することを優先。

    • ここでのエラーはcontrollerでメソッド定義したときのendの数が足りなかったという単純なものだった。
    • その後ダメ元で自動デプロイを実行したらなんと通った!!

unicornで止る原因(仮説)

  • ローカルでエラーがあるものをmasterにmergeしてそのまま自動デプロイをするとエラーで止る。(特にデータベース、コントローラー関連のところ)
  • 不要なプロセスが動いている。(killコマンドでプロセスを消す必要がある。)
  • 途中で強制的にpidの接続が切れた場合、裏でも動いている可能性がある.

反省

  • 一度マイグレーションしたデータベースのテーブルやカラムの変更を行う際は、しっかりと直接記述せずターミナルのコマンドで追加、または削除すること。
  • 自動デプロイがしっかり完了したら基本的にエラーの原因はローカルでの変更が原因なので、実装と動作確認をしっかり行うこと。

• この記事を書いてみての反省

書く時はエラー文をしっかりコピーなどして参照しやすいようにしたほうがわかりやすく書くことができたと思う。
長々と文章ばかりでわかりづらいところが多いので、端的にもっと説明できるように文章力も磨いていく。
拙い文章を最後まで見てくださった方ありがとうございました。
これからも精進していきます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした