部署Ruby on Rails 7应用至Heroku时遇语法错误求助
问题原因分析
1. 语法错误根源
你将Heroku终端命令直接写入了Rails配置文件config/environments/production.rb,这是完全错误的操作。production.rb是Ruby代码文件,仅支持Ruby语法的配置代码,不能放置heroku config:set这类shell命令。错误提示中出现的...oku config:set RAILS_MASTER_KEY=ENV['RAILS_MASTER_KEY']就是你误写入的内容,直接触发了Ruby解析语法错误。
2. 环境变量配置无效原因
你的dotenv-rails gem仅在development和test组加载,生产环境(production)不会加载该gem,因此.env文件中配置的ENV['RAILS_MASTER_KEY']在Heroku生产环境完全无效。此外,.env文件不应提交至Git仓库,Heroku也不会读取该文件。
正确解决步骤
第一步:修复production.rb语法错误
打开config/environments/production.rb,定位到第22行,删除那行错误的heroku config:set命令,确保文件内仅保留合法的Ruby配置代码。
第二步:正确配置Heroku端RAILS_MASTER_KEY
方法1:通过Heroku CLI设置(推荐)
在你的Ubuntu虚拟机终端执行以下命令:
# 替换为本地master.key文件中的实际密钥字符串 heroku config:set RAILS_MASTER_KEY=你的master.key完整值
示例:若master.key为abc123def456xyz789,则执行:
heroku config:set RAILS_MASTER_KEY=abc123def456xyz789
方法2:通过Heroku网页控制台设置
- 登录Heroku官网,进入目标应用页面
- 点击Settings标签页
- 找到Config Vars区域,点击Reveal Config Vars
- 添加新变量:键为
RAILS_MASTER_KEY,值为本地master.key文件的完整字符串,保存即可
第三步:确认本地凭证配置正确
- 确保本地
config/credentials.yml.enc和config/master.key文件存在且匹配(注意:master.key绝不能提交到Git仓库,Git会自动忽略该文件) - 生产环境中,Rails会自动读取Heroku上的
RAILS_MASTER_KEY环境变量,用于解密credentials.yml.enc
第四步:重新部署应用
修复配置后,重新推送代码至Heroku:
git add . git commit -m "修复production.rb语法错误并配置RAILS_MASTER_KEY" git push heroku main
注意事项
- 严禁将
master.key提交至Git仓库,该密钥用于解密凭证,泄露会引发安全风险 dotenv-rails仅适用于开发/测试环境,生产环境的环境变量必须通过Heroku的Config Vars配置- 部署前可本地预编译资产测试,执行
RAILS_ENV=production rake assets:precompile,确认无语法错误
内容的提问来源于stack exchange,提问作者Yuriy
相关产品推荐
相关产品推荐

