Unicorn導入後本番環境でRailsを起動してもアクセスできなかった時、tail -fコマンドが便利だった


はじめに

グループ開発でデプロイ担当になった自分が、アプリケーションをAWSのEC2サーバにデプロイ中に発生した問題と解決できた方法についての話です。

問題発生経緯

  • AWSでEC2インスタンスの生成やポートは設定済み。
  • ec2-userでログインしてRubyやRails、MySQLなどは一通り導入・設定済み。
  • Railsを起動すべくUnicornをインストール。GitHubへのSSH鍵の設定を始め、個人課題でデプロイした時を参考にデプロイ作業を進める。
  • 設定が終わってEC2サーバでRailsを起動。ブラウザに本番環境のURLを入れると以下のエラーが出た。

確認したこと

Unicornのエラーログを確認した。
less log/unicorn.stderr.logコマンドでエラーログを表示できるので実行したところ

I, [2019-12-04T09:31:44.672753 #14271]  INFO -- : listening on addr=0.0.0.0:3000 fd=8
I, [2019-12-04T09:31:44.678089 #14271]  INFO -- : master process ready
I, [2019-12-04T09:31:44.685516 #14275]  INFO -- : worker=0 ready

エラーは見つからなかった...(本当はエラーがあったけど今回の話とは別件だったため割愛)

その後エラーが特定できずデプロイ作業を最初から見直すも状況は改善せず。どうしようか途方に暮れていた時、タイトルのtail -fコマンドに思い至った。

tail fコマンドを実行

tailコマンドは指定したファイルの最後の行を表示してくれるコマンド。-fオプションを追加するとそのままリアルタイムで更新される。

$tail -f log/production.log

上記のコマンドでproduction.logの最後の行がリアルタイムで更新される。さながらローカル環境でサーバを起動した時にターミナルに流れるログのようだった。
tail -fコマンドにより可視化されたログを見るとエラーが発生しているのが確認できた。

$ tail -f log/production.log
F, [2019-12-04T09:43:01.337938 #14275] FATAL -- : [00000000-0000-0000-0000-000000000000] ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.):
F, [2019-12-04T09:43:01.338103 #14275] FATAL -- : [00000000-0000-0000-0000-000000000000]      5:     <%= csrf_meta_tags %>
[00000000-0000-0000-0000-000000000000]      6:     <%= csp_meta_tag %>
[00000000-0000-0000-0000-000000000000]      7: 
[00000000-0000-0000-0000-000000000000]      8:     <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
[00000000-0000-0000-0000-000000000000]      9:     <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
[00000000-0000-0000-0000-000000000000]     10:   </head>
[00000000-0000-0000-0000-000000000000]     11: 
F, [2019-12-04T09:43:01.338136 #14275] FATAL -- : [00000000-0000-0000-0000-000000000000]   
F, [2019-12-04T09:43:01.338213 #14275] FATAL -- : [00000000-0000-0000-0000-000000000000] app/views/layouts/application.html.erb:8:in `_app_views_layouts_application_html_erb__3535391086825638395_34723080'

application.html.erbファイルでapplication.cssのところでエラーが出ていた。
個人課題のデプロイ作業時、この時点ではCSSが反映されないが画面自体は表示されていた。
そのため今回もアセットファイルのコンパイルはまだしていなかったが、どうもそれでエラーが出ているっぽい。
そこで試しにアセットファイルのコンパイルを実行してUnicornを再起動したところ

本番環境にアクセスできるようになった。

まとめ

問題発生時はこうしたログの確認ができないと原因の特定ができないので、ログ確認は少しずつ覚えていきたい。