我有点困惑。我的本地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);
}
}
错误。
这是我尝试过的:
can't find application in /app/public/packs/manifest.json
我是否缺少构建步骤或生产中会导致此问题的内容?还剩下什么要检查?
服务器错误:
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
答案 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,请执行以下调整:
app/javascript:
├── packs:
│ # only webpack entry files here
│ └── application.js
└── src:
│ └── application.css
└── images:
└── logo.svg
中的以下内容,以使webpack在解析的路径中包含app/assets/stylesheets
。config/webpacker.yml
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
块中(这将模拟您的本地环境)<%= stylesheet_pack_tag 'application' %>
答案 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
设置为 true
或 config.assets.compile
默认为 true
。因此,对 /assets
中的文件的每个请求都会传递给 Sprockets。在对每个资产的第一次请求时,它被编译并缓存在 Rails 用于缓存的任何地方(通常是文件系统)中。在后续请求中,Sprockets 收到请求并必须查找指纹文件名,检查构成资产的文件(图像)或文件(css 和 js)是否未被修改,然后如果有缓存版本,则服务于.已知此设置会导致其他运行时不稳定,一般不建议使用
资源:Compile Set to True in Production
仅此而已。
我希望这会有所帮助