Ruby on rails 公共/包中的rails预编译资产未在ec2实例的生产中提供
我正在使用Capistrano在带有Nginx的AWS ec2实例上部署一个带有webpacker的rails 6应用程序。第一次在生产环境中部署应用程序时,我没有在本地预编译资产,时间太长,最终成功了。但随着我的应用程序变得越来越大,需要编译许多css、js和其他资产,我继续使用Ruby on rails 公共/包中的rails预编译资产未在ec2实例的生产中提供,ruby-on-rails,amazon-ec2,capistrano,web-deployment,Ruby On Rails,Amazon Ec2,Capistrano,Web Deployment,我正在使用Capistrano在带有Nginx的AWS ec2实例上部署一个带有webpacker的rails 6应用程序。第一次在生产环境中部署应用程序时,我没有在本地预编译资产,时间太长,最终成功了。但随着我的应用程序变得越来越大,需要编译许多css、js和其他资产,我继续使用RAILS\u ENV=production bundle exec RAILS assets:precompile进行本地预编译。然后我使用SKIP_ASSETS=1 cap production deploy部署到
RAILS\u 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"
}
我感觉清单没有用新的precompiled.css et.js资产哈希更新
你知道我如何在生产中解决这个问题吗?我需要在生产中运行特定的webpacker命令来解决这个问题吗。感谢你在其他地方搜索和提问了几个小时并进行了实验后,我终于想出了一个激进但对我有效的解决方案:我删除了
当前的和发行版
>我的服务器上的文件夹,然后运行,资产:清理,资产:本地计算机上的clobber,然后在环境/生产.rb
中设置config.assets.compile=false
,将输出路径从packs
更改为webpacker.yml
中的公共/资产
。然后我在本地重新预编译,然后部署。我跳过了一个ssets在服务器上再次编译,它就可以工作了!您是否尝试过在prod目录中运行RAILS\u ENV=production bundle exec RAILS assets:precompile
。或者您可以尝试在本地环境中运行production server。这将使调试更容易。确保我运行了RAILS\u ENV=production bundle exec RAILS assets:precompile>
在部署后的生产服务器中,我得到了一切都是最新的。在构建新的包后,无需执行任何操作
消息…不确定我是否理解此,或者您是否可以尝试在本地环境中运行生产服务器
。如何在本地环境中运行生产服务器?`rails server-b 0.0.0.0-p 3000-e生产