Ruby on rails 公共/包中的rails预编译资产未在ec2实例的生产中提供

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部署到

我正在使用Capistrano在带有Nginx的AWS ec2实例上部署一个带有webpacker的rails 6应用程序。第一次在生产环境中部署应用程序时,我没有在本地预编译资产,时间太长,最终成功了。但随着我的应用程序变得越来越大,需要编译许多css、js和其他资产,我继续使用
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生产