Webpacker 4.2在/app/public/packs/manifest.json heroku中找不到应用程序

时间:2019-12-03 16:15:19

标签: javascript ruby-on-rails webpack webpacker

我有点困惑。我的本地Rails应用程序可以很好地与webpacker 4.2配合使用,并且可以做出反应,但是当部署到生产环境时,我会遇到奇妙的public class AddHeaderExchangeFilter implements ExchangeFilterFunction { @Override public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) { ClientRequest newRequest = ClientRequest .create(request.method(), request.url()) .header("FILTER-HEADER-KEY", "FILTER-HEADER-VALUE") .build(); return next.exchange(newRequest); } } 错误。

这是我尝试过的:

  • 尝试添加/删除javascript pack标签的Turbo链接详细信息。
  • 已删除的javascript include标签(不确定是否有帮助)
  • 确保我正在使用最新的Webpacker can't find application in /app/public/packs/manifest.json
  • 运行rake资产:clean && rake资产:在heroku上手动进行预编译,只是为了确保一切都已构建。

我是否缺少构建步骤或生产中会导致此问题的内容?还剩下什么要检查?

服务器错误:

4.2

Webpacker.yml

2019-12-03T15:18:19.022024+00:00 app[web.1]: I, [2019-12-03T15:18:19.021952 #30]  INFO -- : [aa0374eb-bab1-40cc-b40b-6ae3d195e07d] Completed 500 Internal Server Error in 112ms (ActiveRecord: 30.4ms | Allocations: 21296)
2019-12-03T15:18:19.023103+00:00 app[web.1]: F, [2019-12-03T15:18:19.023029 #30] FATAL -- : [aa0374eb-bab1-40cc-b40b-6ae3d195e07d]
2019-12-03T15:18:19.023107+00:00 app[web.1]: [aa0374eb-bab1-40cc-b40b-6ae3d195e07d] ActionView::Template::Error (Webpacker can't find application in /app/public/packs/manifest.json. Possible causes:
2019-12-03T15:18:19.023109+00:00 app[web.1]: 1. You want to set webpacker.yml value of compile to true for your environment
2019-12-03T15:18:19.023111+00:00 app[web.1]: unless you are using the `webpack -w` or the webpack-dev-server.
2019-12-03T15:18:19.023114+00:00 app[web.1]: 2. webpack has not yet re-run to reflect updates.
2019-12-03T15:18:19.023116+00:00 app[web.1]: 3. You have misconfigured Webpacker's config/webpacker.yml file.
2019-12-03T15:18:19.023118+00:00 app[web.1]: 4. Your webpack configuration is not creating a manifest.
2019-12-03T15:18:19.023120+00:00 app[web.1]: Your manifest contains:

{
 "application.js": "/packs/js/application-2a0e2c932678ebbf2ae7.js",
"application.js.map": "/packs/js/application-2a0e2c932678ebbf2ae7.js.map",
"entrypoints": {
 "application": {
"js": [
"/packs/js/application-2a0e2c932678ebbf2ae7.js"
],
 "js.map": [
 "/packs/js/application-2a0e2c932678ebbf2ae7.js.map"
 ]
 },
 "server_rendering": {
 "js": [
 "/packs/js/server_rendering-eb794d024d4852e8ab55.js"
],
 "js.map": [
 "/packs/js/server_rendering-eb794d024d4852e8ab55.js.map"
 ]
}
 },
"server_rendering.js": "/packs/js/server_rendering-eb794d024d4852e8ab55.js",
"server_rendering.js.map": "/packs/js/server_rendering-eb794d024d4852e8ab55.js.map"
}

...

<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application' %>

<link href="https://fonts.googleapis.com/css?family=Open+Sans|Roboto+Slab:700&display=swap" rel="stylesheet">

2019-12-03T15:18:19.023193+00:00 app[web.1]: [aa0374eb-bab1-40cc-b40b-6ae3d195e07d] app/views/layouts/application.html.erb:10

4 个答案:

答案 0 :(得分:6)

我在本地实例上也遇到了同样的错误。

尝试了很多变通方法后,以下步骤对我有用

bundle exec rails webpacker:install

虽然此命令失败并出现以下错误

<块引用>

gyp:未检测到 Xcode 或 CLT 版本! 吉普错误!配置错误 吉普错误!堆栈错误:gyp 失败,退出代码:1 吉普错误! ChildProcess.onCpExit 上的堆栈 (/Users//Documents/Ruby/udemy/test/alpha-blog/alpha-blog/node_modules/node-gyp/lib/configure.js:345:16) 吉普错误! ChildProcess.emit 处的堆栈(节点:事件:376:20) 吉普错误!堆栈在 Process.ChildProcess._handle.onexit (node:internal/child_process:284:12) 吉普错误!系统达尔文 19.6.0 吉普错误!命令 "/usr/local/Cellar/node/15.5.0/bin/node" "/Users//Documents/Ruby/udemy/test/alpha-blog/alpha-blog/node_modules/ node-gyp/bin/node-gyp.js""重建""--verbose""--libsass_ext=""--libsass_cflags=""--libsass_ldflags=""--libsass_library=" 吉普错误! cwd /Users/***/Documents/Ruby/udemy/test/alpha-blog/alpha-blog/node_modules/node-sass 吉普错误!节点 -v v15.5.0 吉普错误!节点-gyp -v v3.8.0 吉普错误!不行

为了纠正这个问题,我使用了以下堆栈溢出答案(在 macOS catalina 上)

https://stackoverflow.com/a/60860951/5876113

然后我运行以下命令

bundle exec rails webpacker:install

执行上述步骤后,我没有再次收到错误消息。 当您遇到 Heroku 部署问题时,请验证这是否适合您。

答案 1 :(得分:2)

如果您将Rails 6+与webpacker一起使用,则由于最新的Rails 6更新,因此javascript和css文件都移动到了u下,而不是v下。

app/javascript

但是,如果您已从旧版本升级到新版本,但仍想从app/assets文件夹中编译CSS,请执行以下调整:

  1. 更新app/javascript: ├── packs: │ # only webpack entry files here │ └── application.js └── src: │ └── application.css └── images: └── logo.svg 中的以下内容,以使webpack在解析的路径中包含app/assets/stylesheets
config/webpacker.yml
  1. 将以下行复制到app/assets
// config/webpacker.yml

resolved_paths: ['app/assets']

这应该可以在您运行app/javascript/packs/application.js时解决CSS编译问题。

答案 2 :(得分:1)

application.css中似乎没有manifest.json,这意味着您可能不会从Webpack javascript文件中导入任何CSS。

如果这都是真的,那么您可以通过以下其中一种方法来修正生产中的错误:

  • 快速(临时)修复:将extract_css: false添加到production中的config/webpacker.yml块中(这将模拟您的本地环境)
  • 如果不想使用Webpacker编译CSS,请执行以下操作:从应用程序布局中删除<%= stylesheet_pack_tag 'application' %>
  • 如果要使用Webpacker编译一些CSS,请执行以下操作:从Webpack javascript中导入至少一个CSS文件

答案 3 :(得分:0)

Rails 应用程序从 Rails 5 版本升级到 Rails 6 后,我遇到了同样的问题。

我尝试了以下解决方案,但没有一个对我有用

重新安装 webpacker

bundle exec rails webpacker:install

在本地和生产中重新编译资产

rails assets:precompile

rails assets:precompile RAILS_ENV=production

删除我的节点模块和我的公共/资产文件并重新运行yarn install:

rm -rf node_modules
rails assets:clobber
rails assets:precompile

我什至将编译好的生产资产推送到 git 并部署到生产

rails assets:precompile RAILS_ENV=production
git add public/assets -f
git commit -m "Vendor compiled assets"

这对我有用

我打开了 config/environments/production.rb 文件并在其中添加了以下配置:

# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false

现在当我再次推送到 Heroku 时,一切正常。

那么此命令的作用 - 如果在 Rails 6 应用程序中没有该命令,则假定 config.assets.compile 设置为 trueconfig.assets.compile 默认为 true。因此,对 /assets 中的文件的每个请求都会传递给 Sprockets。在对每个资产的第一次请求时,它被编译并缓存在 Rails 用于缓存的任何地方(通常是文件系统)中。在后续请求中,Sprockets 收到请求并必须查找指纹文件名,检查构成资产的文件(图像)或文件(css 和 js)是否未被修改,然后如果有缓存版本,则服务于.已知此设置会导致其他运行时不稳定,一般不建议使用

资源Compile Set to True in Production

仅此而已。

我希望这会有所帮助