未在ec2实例上投入生产的公共/包装中的预编译资产轨道

问题描述 投票:0回答:1

我正在使用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应用程序。我第一次在生产环境中部署该应用程序时,是在没有本地本地编译资产的情况下进行的,并且...

ruby-on-rails amazon-ec2 capistrano web-deployment
1个回答
0
投票

您的nginx配置是否有效?它在行尾缺少;

您可以用sudo nginx -t进行检查

© www.soinside.com 2019 - 2024. All rights reserved.