gpt4 book ai didi

ruby-on-rails - 在 ec2 实例上未在生产中提供公共(public)/包中的 rails 预编译 Assets

转载 作者:行者123 更新时间:2023-12-04 17:29:45 28 4
gpt4 key购买 nike

我正在使用 Capistrano 在带有 Nginx 的 AWS ec2 实例上部署带有 webpacker 的 rails 6 应用程序。我第一次在生产中部署应用程序时,我没有在本地预编译 Assets ,花了很长时间才最终成功。但是随着我的应用程序变得越来越大,需要编译许多 css、js 和其他 Assets ,我继续使用 RAILS_ENV=production bundle exec rails assets:precompile 在本地进行预编译。然后我使用 SKIP_ASSETS=1 cap production deploy 部署到生产环境,其中 SKIP_ASSETS 是 capistrano/task 文件夹中的一个 rake 任务。我能够更快地部署应用程序,而无需在生产服务器上编译 Assets 。当我刷新浏览器时,我可以看到我的应用程序,但是没有提供文件夹 public/packs 中预编译的 Assets (.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"
}

我感觉 list 没有使用新的预编译 .css 和 .js Assets 哈希进行更新。

知道如何在生产中解决这个问题吗?我是否需要在生产中运行特定的 webpacker 命令来解决这个问题。谢谢

最佳答案

经过数小时在别处搜索和提问并进行实验,我终于想出了一个激进但对我有用的解决方案:我删除了 currentreleases我的服务器上的文件夹,然后在我的本地计算机上运行,​​assets:clean,assets:clobber,然后设置 config.assets.compile = falseenvironement/production.rb , 将 output_path 从 packs 更改为至 public/assetswebpacker.yml .然后我在本地再次预编译然后部署。我跳过了在服务器上再次编译 Assets ,它有效!。

关于ruby-on-rails - 在 ec2 实例上未在生产中提供公共(public)/包中的 rails 预编译 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60849077/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com