【Rails】 프로덕션 환경에서 자산 프리 컴파일 설정
프로덕션 환경을 정돈한 후의 애셋 프리컴파일의 설정에 대해.
환경
루비 2.6.4
Rails 5.2.4.1
puma 3.12.4
nginx 1.12.2
오류 로그
프로덕션 환경에서 루트에 액세스하면 오류가 표시됩니다.
에러 로그는 이런 느낌입니다. (읽기 쉽도록 성형 완료)
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
확인한 주소에 직접 액세스해 보면, 제대로 표시된다(아래 화상).
2. public 아래의 파일 공개
config/environments/production.rb
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
의 값이 false 의 경우, public 부하의 파일이 공개되지 않으므로,
true
로 하면(자) 잘 갑니다.하지만, 직접
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
명령으로 확인하면 됩니다.링크
Reference
이 문제에 관하여(【Rails】 프로덕션 환경에서 자산 프리 컴파일 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aiandrox/items/408724ab8a4482fb5873텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)