前回の続き→ EC2内の環境構築【デプロイ】/ 初めてのAWS忘備録③
[ec2-user@ip... アプリ名]$ bundle exec puma -C config/puma/production.rb -e production
上記コマンドでアプリを起動させたは良いものの、実際の画面を見てみるとこのようなエラーが出た。
エラーログを見にいくと、
ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.):
とあった。アセットされたapplication.cssがないらしい。
production環境
では自動でcss
やjs
をコンパイルしてくれないので(デフォルト設定がそうなっているので) 自分でプリコンパイルする必要があるそう。
[ec2-user@ip... アプリ名]$ bundle exec rails assets:precompile RAILS_ENV=production
public/assets/
配下にプリコンパイルされたアセットが存在することを確認。
[ec2-user@ip... アプリ名]$ cd public/assets/
[ec2-user@ip... アプリ名]$ ls
application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js
application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js.gz
application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz
次に、config/environments/production.rb
内にある
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
の値がfalse
の場合、public配下のファイルが公開されないので、true
にするとうまく行く。
しかし直接true
直書きは良くないので、エラーが出るのは、ENV['RAILS_SERVE_STATIC_FILES']
に値が入っていないのが原因なので、ターミナルから変数を渡すことでtrue
にする。
[ec2-user@ip... アプリ名]$ export RAILS_SERVE_STATIC_FILES=true
Nginx
とpuma
の再起動すれば反映される。
参考記事
【Rails】本番環境におけるアセットプリコンパイルの設定
Rails5でnginx+pumaでproduction環境を構築する