19
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

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

環境

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コマンドで確認するといいです。

リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
19
Help us understand the problem. What are the problem?