This page looks best with JavaScript enabled
⚠️

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

 ·   ·  ☕ 3 分で読めます
✏️

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

環境

ruby 2.6.4
Rails 5.2.4.1
puma 3.12.4
nginx 1.12.2

エラーログ

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

 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. 手動でプリコンパイルする

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

1
2
3
4
5
6
7
8
9
[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/配下にプリコンパイルされたアセットが存在することを確認。

1
2
3
4
5
6
[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 配下のファイルを公開する

1
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

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

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

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

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

1
2
3
4
5
6
7
8
9
[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コマンドで確認するといいです。

リンク

Share on

END
END
@aiandrox

 
目次