You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6部署Heroku遇NameError: uninitialized constant Rack::Cors

问题成因

报错NameError: uninitialized constant Rack::Cors的核心原因是生产环境没有加载rack-cors gem,Rails执行CORS初始化配置时找不到对应常量。
从Heroku构建日志可确认两个直接诱因:

  1. Gemfile中存在重复的rack-cors、devise、devise-jwt gem声明,bundler依赖解析时可能出现异常
  2. 生产环境执行bundle install(跳过了development、test分组)后,最终安装的57个依赖gem中完全没有rack-cors,说明该gem被错误放置到了非生产环境的分组中,或重复声明导致生产环境未被纳入安装范围。
修复步骤
  • 清理Gemfile重复配置
    打开项目根目录Gemfile,搜索所有rack-cors、devise、devise-jwt相关条目,每个gem仅保留1条声明,且rack-cors必须写在Gemfile顶层,不能包裹在group :development, :test do代码块内,参考写法:
    # 顶层声明,生产/开发/测试环境均会安装
    gem 'rack-cors'
    gem 'devise'
    gem 'devise-jwt'
    
  • 更新依赖锁文件
    在本地项目根目录执行命令,重新解析依赖并更新Gemfile.lock:
    bundle install
    
    执行完成后确认输出中存在Using rack-cors [版本号]的记录,即代表依赖解析正常。
  • 本地验证生产构建流程
    本地模拟生产环境执行资源预编译,确认不再抛出常量找不到的错误:
    RAILS_ENV=production bundle exec rake assets:precompile
    
  • 重新部署
    将修改后的Gemfile、Gemfile.lock提交到Git仓库,重新推送到Heroku触发构建即可正常部署。

内容的提问来源于stack exchange,提问作者AbdUlRahman Shawareb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:54:20