Heroku推送突发失败,配置RAILS_MASTER_KEY仍报错求助
我之前也碰到过几乎一模一样的问题,折腾了好一阵才解决,给你分享几个实用的排查和解决思路:
先确认RAILS_MASTER_KEY的准确性
别小看复制粘贴的误差!有时候手动复制master.key内容到Heroku配置时,会不小心带个空格或者换行符,导致密钥不匹配。你可以在本地终端执行heroku config:get RAILS_MASTER_KEY,把输出和本地config/master.key文件里的内容逐字符对比,确保完全一致——包括前后不能有任何多余字符。检查Active Storage配置的依赖
报错是在检测Active Storage配置时触发的,你得看看config/storage.yml里的配置是不是依赖了加密的credentials(比如存在config/credentials.yml.enc里的S3密钥)。如果是的话,RAILS_MASTER_KEY必须能正确解密这个文件,否则Active Storage的配置根本加载不起来,自然会报密钥缺失。重新设置环境变量,避免手动复制错误
直接用命令从本地master.key文件读取内容设置到Heroku,彻底规避手动复制的问题:heroku config:unset RAILS_MASTER_KEY heroku config:set RAILS_MASTER_KEY=$(cat config/master.key)执行完这两个命令后,再重新推送代码试试。
深挖构建日志的细节
推送失败时,别只盯着最后那行密钥错误的提示,往上翻完整的Heroku构建日志,看看有没有更早的异常。有时候这个密钥报错只是连锁反应,比如之前的assets预编译步骤已经因为密钥问题失败了,才导致后面的runner命令执行出错。本地模拟生产环境测试
在本地切换到production环境执行同样的runner命令,看看会不会复现错误:RAILS_ENV=production bin/rails runner "puts %Q{heroku_detecting_active_storage_config=#{Rails.application.config.active_storage.service}}"如果本地也报错,那问题大概率出在本地的credentials配置或者master.key本身,而不是Heroku的设置。
检查Rails版本与buildpack兼容性
不同Rails版本对credentials的加载逻辑有细微差异,比如Rails 7引入了更灵活的credentials管理方式。如果你的项目用了较新的Rails版本,可以尝试重新设置Heroku的Ruby buildpack:heroku buildpacks:set heroku/ruby然后重新部署,看看能不能解决问题。
内容的提问来源于stack exchange,提问作者hellion

