LoginSignup
38
26

More than 3 years have passed since last update.

【Rails】本番環境におけるアセットプリコンパイルの設定

Last updated at Posted at 2020-03-11

自分用メモです。
本番環境を整えた後のアセットプリコンパイルの設定について。

環境

ruby 2.6.4
Rails 5.2.4.1
puma 3.12.4
nginx 1.12.2

エラーログ

本番環境でルートにアクセスしたらエラーが表示される。
image.png
エラーログはこんな感じです。(読みやすいように整形済)

test_app/log/production.log
 INFO -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] Started GET "/" for 119.245.128.225 at 2020-03-09 02:40:39 +0000
 INFO -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] Processing by PostsController#index as HTML
 INFO -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]   Rendering posts/index.html.erb within layouts/application
DEBUG -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]   ^[[1m^[[35m (0.5ms)^[[0m  ^[[1m^[[35mSET NAMES utf8mb4 COLLATE utf8mb4_general_ci,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483^[[0m
DEBUG -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]   ^[[1m^[[36mPost Load (0.6ms)^[[0m  ^[[1m^[[34mSELECT `posts`.* FROM `posts`^[[0m
 INFO -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]   Rendered posts/index.html.erb within layouts/application (39.9ms)
 INFO -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] Completed 500 Internal Server Error in 41ms (ActiveRecord: 1.1ms)
FATAL -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]
FATAL -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.):
FATAL -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]      5:     <%= csrf_meta_tags %>
           [e53342b0-17fc-4146-a4d1-6d64dc3007cd]      6:     <%= csp_meta_tag %>
           [e53342b0-17fc-4146-a4d1-6d64dc3007cd]      7:
           [e53342b0-17fc-4146-a4d1-6d64dc3007cd]      8:     <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
           [e53342b0-17fc-4146-a4d1-6d64dc3007cd]      9:     <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
           [e53342b0-17fc-4146-a4d1-6d64dc3007cd]     10:   </head>
           [e53342b0-17fc-4146-a4d1-6d64dc3007cd]     11:
FATAL -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd]
FATAL -- : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] app/views/layouts/application.html.erb:8:in `_app_views_layouts_application_html_erb___3755432300733913925_37575720'
 INFO -- : [8619eccb-3edb-4fa4-9a1b-70d8b0a37c37] Started GET "/" for 119.245.128.225 at 2020-03-09 02:40:45 +0000
 INFO -- : [8619eccb-3edb-4fa4-9a1b-70d8b0a37c37] Processing by PostsController#index as HTML

ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.):

要するに、アセットされた"application.css"がないということらしい。

手順

1. 手動でプリコンパイルする

自動でプリコンパイルされないので、手動でプリコンパイルしてあげる。

terminal
[username@ip-10-0-11-63 test_app]$ bundle exec rails assets:precompile RAILS_ENV=production
yarn install v1.22.1
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.06s.
I, [2020-03-09T02:51:40.398095 #11404]  INFO -- : Writing /var/www/test_app/public/assets/application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js
I, [2020-03-09T02:51:40.398487 #11404]  INFO -- : Writing /var/www/test_app/public/assets/application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js.gz
I, [2020-03-09T02:51:40.401030 #11404]  INFO -- : Writing /var/www/test_app/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
I, [2020-03-09T02:51:40.401248 #11404]  INFO -- : Writing /var/www/test_app/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz

public/assets/配下にプリコンパイルされたアセットが存在することを確認。

terminal
[username@ip-10-0-11-63 test_app]$ cd public/assets/
[username@ip-10-0-11-63 assets]$ ls
application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js
application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js.gz
application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz
http://18.179.8.134/assets/application-111ac35321e379f53529ace176fe931c952be73f7ffd688b815ec21878126685.js

確認したアドレスに直アクセスしてみると、ちゃんと表示される(下記画像)。
image.png

2. public配下のファイルを公開する

config/environments/production.rb
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

の値がfalseの場合、public配下のファイルが公開されないので、trueにするとうまく行きます。
image.png
が、直接trueにするのはよくないということだったので、上の変更はやめました。
エラーが出るのはENV['RAILS_SERVE_STATIC_FILES']に値が入っていないのが原因なので、ターミナルから変数を渡すことにします。

terminal
[username@ip-10-0-11-63 test_app]$ export RAILS_SERVE_STATIC_FILES=true

3. サーバーを再起動する

コードの変更などを行った後、nginxの再起動だけでは反映されないので、pumaも再起動する必要があります。

terminal
[username@ip-10-0-11-63 test_app]$ ps ax | grep puma
14353 ?        Sl     0:00 puma 3.12.4 (unix:///var/www/test_app/tmp/sockets/puma.sock) [test_app]
14355 ?        Sl     0:00 puma: cluster worker 0: 14353 [test_app]
14356 ?        Sl     0:00 puma: cluster worker 1: 14353 [test_app]
14662 pts/1    S+     0:00 grep --color=auto puma
[username@ip-10-0-11-63 test_app]$ kill -9 14353
[username@ip-10-0-11-63 test_app]$ bundle exec puma -C config/puma/production.rb -e production -d
[username@ip-10-0-11-63 test_app]$ sudo nginx -s stop
[username@ip-10-0-11-63 test_app]$ sudo service nginx start

親玉のpumaだけkillすれば、cluster workerは消えてくれます。不安な場合は、再度$ ps ax | grep pumaコマンドで確認するといいです。

リンク

38
26
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
26