Rails+Webpacker生产环境报错:找不到application-bundle求助
从你提供的信息来看,核心矛盾是Webpacker报错找不到application-bundle,但服务器上的文件和manifest配置都显示该entrypoint存在。结合你的技术栈(Rails 5.2.2 + Webpacker 4.0.0-rc3 + Capistrano + React on Rails),我整理了几个可能的原因和对应的解决步骤:
1. 检查Capistrano部署的Release版本一致性
错误信息中显示的Release路径是/var/www/my_app/releases/20190118230511,但你检查的是20190118232112,这说明应用可能还在运行旧的Release版本:
- 执行命令查看
current软链接指向的Release:ls -la /var/www/my_app/current - 如果指向旧版本,可以重新运行Capistrano部署,或者手动更新软链接:
ln -sf /var/www/my_app/releases/20190118232112 /var/www/my_app/current - 同时,查看Capistrano部署日志,确认Webpack编译步骤没有报错、完整执行。
2. 确认Capistrano集成了Webpacker编译任务
Webpacker资产需要在部署时编译,你需要确保Capistrano配置正确加载了Webpacker任务:
- 在
Capfile中添加以下内容:require 'capistrano/webpacker' - 重新部署时,Capistrano会自动执行
webpacker:compile任务,生成最新的pack文件和manifest。
3. 修正React on Rails的Server Bundle配置
你的config/initializers/react_on_rails.rb中设置了:
config.server_bundle_js_file = "application-bundle.js"
这里存在问题:application-bundle.js是Webpacker编译后的带哈希的chunk文件(比如application-bundle-d19ff417e51c4d079a26.chunk.js),而React on Rails需要的是单独的服务端渲染bundle,不是客户端的bundle文件:
- 在
app/javascript/packs下创建server-bundle.js,导入所有需要服务端渲染的组件:// app/javascript/packs/server-bundle.js import ReactOnRails from 'react-on-rails'; // 导入你的组件示例 import App from '../components/App'; ReactOnRails.register({ App }); - 更新react_on_rails配置:
config.server_bundle_js_file = "server-bundle.js" - 重新编译资产,确保server bundle正确生成。
4. 检查Webpack SplitChunks配置
Webpacker 4默认已经启用了SplitChunks优化,你手动调用environment.splitChunks();可能会覆盖默认配置,导致entrypoint识别异常:
- 注释掉
config/webpack/environment.js中的这一行:// environment.splitChunks(); - 重新编译生产环境资产:
RAILS_ENV=production NODE_ENV=production bin/webpack - 查看新生成的manifest,确认entrypoints结构正常。
5. 清理缓存并重新编译资产
有时候旧的缓存文件会导致manifest异常,尝试清理后重新编译:
# 清理旧的pack文件 RAILS_ENV=production bundle exec rails webpacker:clobber # 重新编译 RAILS_ENV=production bundle exec rails webpacker:compile
完成后检查public/packs下的文件和manifest是否正确生成。
6. 验证Webpacker版本兼容性
Webpacker 4.0.0-rc3属于预发布版本,可能存在兼容性问题:
- 尝试升级到Webpacker 4.0.0正式版(如果已发布):
yarn upgrade @rails/webpacker@4.0.0 bundle update webpacker - 若版本没问题,可尝试重新安装依赖:
rm -rf node_modules yarn.lock yarn install
内容的提问来源于stack exchange,提问作者AntonAL

