ある日の本番環境エラー
エラー文
「Your local changes to the following files would be overwritten by merge:
Gemfile.lock」
「Gemfile.lockがマージによって上書きされています」
⏩「マージする前に変更をコミットするか、隠してください」
https://qiita.com/15grmr/items/433ee3b47828aaad32a8
Gemfile.lockファイルは削除しても大丈夫・・・
ということで削除。
次に
メソッド周りで怒られた為修正。
(デプロイ前にRubocop周りで修正してました。
表記を変えたところエラーがでてしまい戻したところエラーは出ず。
奥深そうな為別で考えます)
次に
Could not find timeout-0.3.0 in any of the sources
Run `bundle install` to install missing gems.
gem周りで怒られました
デプロイ前にテストコード書こうかな?という事で
こちらのgemを追加しておりました
# gem 'net-smtp'
# gem "net-pop"
# gem "net-imap"
一旦これらもコメントアウトしました
さて、これらを行い再度rails sをおこなったところ
・・・やはりエラー(502)
502エラーは「サーバー側の問題」
sudo tail -f /var/log/nginx/error.log
こちら、nginxでのエラーログを見れるコマンドということで試したところ
2022/10/06 03:24:55 [error]
17647#17647: *11 connect() to unix:///home/ec2-user/style/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream,
client: 172.31.41.109, server: stylecms.net,
request: "GET / HTTP/1.1", upstream: "http://unix:///home/ec2-user/style/tmp/sockets/puma.sock:/", host: "172.31.0.19"
(111: Connection refused)
接続拒否・・・
sudo tail -f log/production.log
こちら本番環境のログをみれるコマンド
seedで作成したデータが作られている
ps aux | grep puma
ec2-user 17756 0.0 0.1 119424 988 pts/0 S+ 03:34 0:00 grep --color=auto puma
これはkillしないほうがいいのかな・・・
手詰まりました・・
別日。一旦整理してみることに。
まずは追加しようとしていた
# gem 'net-smtp'
# gem "net-pop"
# gem "net-imap"
まず追加を行った経緯として、
これらのGemは参考にしたデプロイ手順にGemfileへ追加するよう書いてありました
今回、再度見返した際に現在のGemfileと照らしあわせ、
「あれ,ないな・・いれとこ」
という感じで追加しておりました。
これらのGemがなんなのかは一度おき
どうやら必須ではない様子?
→というよりこれらを追加すると
Gemに対してのエラーが出てしまい、エラー文を検索したところ
「設定が二重になってしまっている」のような参考記事が手に入りました。
もしかしたら別の手順でこれらを終えているのかも・・
少なくとも確実にない状態でデプロイ作業ができていた為
消すことにしました。
そうなると、一旦現状のエラーとしては
nginx 502エラー。
エラー解決に関し、自分は原因の切り分けが出来ていなかったです。
ここで改めて現状を整理しました。
①きっかけとなったGemfile、Gemfile.lockは無事か
(及びこれらのファイルはなんなのか)
②それ以外で出ているエラー
まずは①について。
改めてGemfileをもともとの状態に戻し、確認し本番環境へ持っていきました
特にエラーも出ず更新できています。
(差分も表示されました)
ファイルの確認も行ったところ
Gemfile、Gemfile.lock共にファイルの所在確認ができました!
ここで、私は一度Gemfile.lockを削除していたはず
(ここ、ちゃんと所在の確認までしておくべきでした・・)
とてもわかりやすい・・
bundlerについても確認しました。
bundlerは「gemの依存関係とバージョンを管理」
・・・
「Aというgemに対し、Aを使うにはBというgemを使う必要がある、そのgemを使うにはCというgemを….
という形で依存関係のあるgemたちをbundlerを使うことで一括でインストールすることができる!」
(しっかりと依存関係を解決しインストールしてくれる、とのこと・・そうだったんだすごいね)
これまで自分はbundle installで全て行ってきましたが、
保存場所指定などもできるみたいです
bundlerの役割として他にも「gemのバージョン管理」をしてくれるそう
一旦bundlerはこのあたりで
次にGemfile
bundle installを受けてbundler はGemfileをみます
インストールされていないgemを見つけてインストール
そしてGemfile.lock
依存関係のあるgemを含め、Gemfileをもとに実際にインストールされた全てのgem一覧とバージョンが記載されたファイル
(bundlerの出力結果)
また、gemfile.lockは自動で更新される!
ここで改めて、
やはりgemfileが原因である可能性は一旦消しました。
さて、nginxでの502エラーに関して
ここでも切り分けをしたいと思います。
まずはnginxはリクエストを受け取っているのか。
sudo tail -f /var/log/nginx/error.log
nginxのエラーログを確認してみました
unix:///home/ec2-user/style/tmp/sockets/puma.sock failed (111: Connection refused)
puma.sockが何かしらあるのかな・・
次にpumaに関しても確認。
cd log
tail -f puma-error.log
(こちらで実行結果のみ表示することができる)
リクエストに対して何も表示されませんでした
ということはそもそもpuma実行まで到達していない様子。
puma.sockに関する設定は puma.rbに書いている
ということで確認したところ・・・
なんと以前問題なく動作していた状態から書き変わっていました。
(ローカルでも変わっていることを確認)
bind “unix://#{Rails.root}/tmp/sockets/puma.sock”
↓
bind Rails.root.join(‘path/to’
こちら修正を行い・・
動きました!!
なぜ書き変わってしまったのか原因追求できていませんが
一旦駆け足でまとめました。