RailsアプリのEC2の本番環境において、Webpackerを動作させる際に出会った、エラー対応を記します。
Rack専用Webサーバーとして、Unicornを採用しています。
参考
結論
エラー内容
アプリ名/log/production.log
[56c395e9-87c3-4c60-b32d-6e407387d208] ActionController::RoutingError (No route matches [GET] "/packs/js/application-7b3203a2b398f48e7cc4.js"):
[56c395e9-87c3-4c60-b32d-6e407387d208
解決に至ったコード
:アプリ名/config/environments/production.rb
config.public_file_server.enabled = true
解決方法
解決方法は以下の流れになりました。
- 開発環境では正常に動作していることを確認
- .node_modlueを削除(別にしなくてもいいかも
- yarn(2をやった場合
- rails webpacker:compile RAILS_ENV=production(やっていなかったら
- ログを確認
- 対応
上記の5・6の流れに関しましてご説明させて頂きます。
自分の場合、同じくUnicornを用いた開発環境において、動作しないことを確認致しましたので、環境依存によることが原因であることが分かりました。
その後、webpackerを再起動させるために、2 ~4の作業を行いました。この部分は恐らく必要なかったかもしれません。
5. ログを確認
Unicornのログを確認します。私の場合は以下のデイレクトリで確認できます。
アプリ名/log/production.log
[56c395e9-87c3-4c60-b32d-6e407387d208] ActionController::RoutingError (No route matches [GET] "/packs/js/application-7b3203a2b398f48e7cc4.js"):
[56c395e9-87c3-4c60-b32d-6e407387d208
もしこのエラーと同様なエラーが表示される場合には、この後の対応策が活用できるかもしれません。
6. 対応
冒頭に記載しましたが、以下のコードをRailsの設定ファイルに記載致しました。
:アプリ名/config/environments/production.rb
config.public_file_server.enabled = true
これで動作を確認することが出来ました。
まとめ
今回得た学びは以下の通りです。
- まずはログをちゃんと確認すること。
- 開発環境で動作した場合は、環境依存を疑うこと。
以上です。直接的なエラーの原因などを記載せず申し訳ございませんが、解決にお力になれれば幸いです。