我正在使用Capistrano在具有Nginx的AWS ec2实例上通过webpacker部署Rails 6应用程序。第一次在生产环境中部署该应用程序时,我这样做是在本地不进行资产预编译的情况下,花费的时间太长,终于可以工作了。但是随着我的应用程序变得越来越庞大,需要编译许多CSS,JS和其他资源,我继续使用RAILS_ENV=production bundle exec rails assets:precompile
在本地进行预编译。然后我用SKIP_ASSETS=1 cap production deploy
部署到生产环境,其中SKIP_ASSETS是capistrano / task文件夹中的rake任务。我能够更快地部署应用程序,而无需在生产服务器上编译资产。当我刷新浏览器时,可以看到我的应用程序,但是没有提供在public / packs文件夹中预编译的资产(.css和.js文件的哈希与public / packs中的哈希值不匹配。
我在浏览器控制台中看到以下错误
GET https://somedomain.net/packs/css/application-e1eaaa01.css net::ERR_ABORTED 404 (Not Found) GET https://somedomain.net/packs/js/application-a89fd481878017456cf7.js net::ERR_ABORTED 404 (Not Found)
这是我在public / packs / css /中的生产中看到的内容>
application-91e4cb67.css application-91e4cb67.css.br application-91e4cb67.css.gz
查看生产中的日志,我发现了这个
FATAL -- : [2c61c3a9-0133-4eda-b37b-4fefe8948ec0] [2c61c3a9-0133-4eda-b37b-4fefe8948ec0] ActionController::RoutingError (No route matches [GET] "/packs/js/application-a89fd481878017456cf7.js"):
看着nginx.conf,我有这行
root /home/deploy/myapp/current/public
我也尝试在
production.rb
中设置此设置,但没有解决问题config.public_file_server.enabled=true
public / packs / manifest.json看起来像这样:
{ "admin.js": "/packs/js/admin-3adbcf597c3892508a80.js", "admin.js.map": "/packs/js/admin-3adbcf597c3892508a80.js.map", "app.js": "/packs/js/app-aedc421c2c4342e69b23.js", "app.js.map": "/packs/js/app-aedc421c2c4342e69b23.js.map", "application.css": "/packs/css/application-e1eaaa01.css", "application.css.map": "/packs/css/application-e1eaaa01.css.map", "application.js": "/packs/js/application-a89fd481878017456cf7.js", "application.js.map": "/packs/js/application-a89fd481878017456cf7.js.map", "curriculum.js": "/packs/js/curriculum-90932b11d8e738537011.js", "curriculum.js.map": "/packs/js/curriculum-90932b11d8e738537011.js.map", "entrypoints": { "admin": { "js": [ "/packs/js/admin-3adbcf597c3892508a80.js" ], "js.map": [ "/packs/js/admin-3adbcf597c3892508a80.js.map" ] }, "app": { "js": [ "/packs/js/app-aedc421c2c4342e69b23.js" ], "js.map": [ "/packs/js/app-aedc421c2c4342e69b23.js.map" ] }, "application": { "css": [ "/packs/css/application-e1eaaa01.css" ], "js": [ "/packs/js/application-a89fd481878017456cf7.js" ], "css.map": [ "/packs/css/application-e1eaaa01.css.map" ], "js.map": [ "/packs/js/application-a89fd481878017456cf7.js.map" ] }, "curriculum": { "js": [ "/packs/js/curriculum-90932b11d8e738537011.js" ], "js.map": [ "/packs/js/curriculum-90932b11d8e738537011.js.map" ] }, "jquery-ui": { "js": [ "/packs/js/jquery-ui-3e39ba39480cd149114d.js" ], "js.map": [ "/packs/js/jquery-ui-3e39ba39480cd149114d.js.map" ] }, "jquery": { "js": [ "/packs/js/jquery-9e6aaa895e0224ac507d.js" ], "js.map": [ "/packs/js/jquery-9e6aaa895e0224ac507d.js.map" ] }, "quill_editor": { "js": [ "/packs/js/quill_editor-9b402f092ddc5d16a887.js" ], "js.map": [ "/packs/js/quill_editor-9b402f092ddc5d16a887.js.map" ] }, "shared_javascript": { "js": [ "/packs/js/shared_javascript-f0cae6e551b8cfc573c9.js" ], "js.map": [ "/packs/js/shared_javascript-f0cae6e551b8cfc573c9.js.map" ] }, "video_player": { "js": [ "/packs/js/video_player-8b5df237b6fc7da9efea.js" ], "js.map": [ "/packs/js/video_player-8b5df237b6fc7da9efea.js.map" ] } }, "jquery-ui.js": "/packs/js/jquery-ui-3e39ba39480cd149114d.js", "jquery-ui.js.map": "/packs/js/jquery-ui-3e39ba39480cd149114d.js.map", "jquery.js": "/packs/js/jquery-9e6aaa895e0224ac507d.js", "jquery.js.map": "/packs/js/jquery-9e6aaa895e0224ac507d.js.map", "quill_editor.js": "/packs/js/quill_editor-9b402f092ddc5d16a887.js", "quill_editor.js.map": "/packs/js/quill_editor-9b402f092ddc5d16a887.js.map", "shared_javascript.js": "/packs/js/shared_javascript-f0cae6e551b8cfc573c9.js", "shared_javascript.js.map": "/packs/js/shared_javascript-f0cae6e551b8cfc573c9.js.map", "video_player.js": "/packs/js/video_player-8b5df237b6fc7da9efea.js", "video_player.js.map": "/packs/js/video_player-8b5df237b6fc7da9efea.js.map" }
[我有一个明显的清单,就是没有使用新的预编译的.css和.js资产哈希值进行更新。
任何想法我如何在生产中解决这个问题?我是否需要在生产上运行特定的webpacker命令来解决此问题。谢谢
我正在使用Capistrano在具有Nginx的AWS ec2实例上通过webpacker部署Rails 6应用程序。我第一次在生产环境中部署该应用程序时,是在没有本地本地编译资产的情况下进行的,并且...
您的nginx配置是否有效?它在行尾缺少;
。
您可以用sudo nginx -t
进行检查