概略
RailsアプリをAWSでデプロイ後、ELBを導入し負荷分散を試みた。
AMIから2つ目のEC2インスタンスを作成し、ロードバランサーを作成。
しかし、2つ目のインスタンスのみ、ヘルスチェックでunhealthy。ターミナルからインスタンスへのログインは可能。
ログの確認
エラーとなっているEC2インスタンスでログを確認。
cat
コマンドだと膨大な量になるので、自分はtail -n (行数)
などで確認した。
ActionView::Template::Error (Webpacker can't find application in /var/www/kangolog/releases/20210112152601/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
webpackのエラーかな?
##bundle exec cap productionした際のログを確認
コンパイルのログがない!
RAILS_ENV=production bundle exec rails webpacker:compile
して見たが、
Everything's up-to-date. Nothing to do
となり、もちろん挙動も変わらず、、、むむむ。
解決方法
サーバーの指定の問題でした。
server 'Elastic IP', user: 'ec2-user', roles: %w{app db web}
server 'IP', user: 'ec2-user', roles: %w{app db web2}
なぜかwebとweb2に分けてしまっており、これが原因で2つ目のインスタンスのみデプロイされなかったようです。
以下に修正。
server 'Elastic IP', user: 'ec2-user', roles: %w{app db web}
server 'IP', user: 'ec2-user', roles: %w{app db web}
学び
ローカル環境ではエラー画面で内容を教えてくれるので、ログを確認することが疎かになってました。
本番環境ではあの真っ赤なエラー画面がデフォルトでは出ないので、(当たり前のことですが)ログを確認するようになりました。
インフラ面の導入は、アプリ自体に変化は見えませんが、自分の中ではアプリが成長した実感がありなかなか楽しいです。
今まで触れてこなかったネットワークやセキュリティなど、web開発の土台となる部分の勉強になり、とても有意義でした!