Rails 5.2部署Heroku遇LoadError:缺失coffee_script,求移除方案
解决Heroku部署时
LoadError: cannot load such file -- coffee_script问题 首先,咱们先理清楚为什么本地/CI没问题但Heroku炸了——大概率是依赖链或者部署环境的配置差异导致的,下面一步步排查解决:
1. 定位coffee_script的依赖来源
先搞清楚到底是哪个gem在偷偷依赖coffee_script,在本地跑这个命令:
bundle dependency coffee_script
这会列出所有直接/间接依赖它的gem。如果是某个第三方gem引入的,你可以看看有没有该gem的更新版本已经移除了coffee依赖;如果是Rails本身的默认依赖,那咱们继续往下走。
2. 清理Gemfile和相关配置
- 先检查你的
Gemfile,如果有gem 'coffee-rails'或者gem 'coffee_script',直接删掉这一行。 - 打开
config/application.rb或者config/initializers/assets.rb,看看有没有类似require 'coffee_script'或者Rails.application.config.assets.register_engine '.coffee', CoffeeScript::Rails::Template这样的配置,全部移除。 - 再检查
app/assets/javascripts/application.js,如果有//= require coffee_script或者//= require_tree .(如果目录里还有.coffee文件的话),要么删掉引用,要么把所有.coffee文件转成.js/.jsx文件(既然你想彻底移除coffee)。
3. 重新生成Gemfile.lock并提交
本地环境下执行:
rm Gemfile.lock bundle install
这会重新生成干净的依赖锁文件,确保没有残留的coffee相关依赖。然后把新的Gemfile.lock提交到Git仓库,再重新部署到Heroku。
4. 检查Heroku的部署配置
- 登录Heroku控制台,看看你的应用有没有添加额外的CoffeeScript相关buildpack,如果有的话直接移除。
- 检查Heroku的环境变量,有没有设置
BUNDLE_WITHOUT?如果设置了比如development:test,那生产环境的依赖应该是全装的,但如果有奇怪的配置,可能导致依赖缺失,建议重置成默认值:heroku config:unset BUNDLE_WITHOUT - 最后,部署前可以先清空Heroku的缓存,避免旧依赖残留:
然后再重新部署。heroku repo:purge_cache -a your-app-name
5. 额外排查:ActiveStorage相关依赖
你提到用了ActiveStorage,虽然Rails 5.2的ActiveStorage本身不依赖coffee,但如果你的应用里有自定义的ActiveStorage相关JS(比如上传组件),可能不小心引入了coffee代码,记得把这些也转成纯JS。
如果走完这些步骤还是有问题,你可以把bundle dependency coffee_script的输出贴出来,这样能更精准定位问题~
内容的提问来源于stack exchange,提问作者davidwessman
相关产品推荐
相关产品推荐

