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

部署Rails应用到Heroku报KeyError: key not found: secret_key_base如何解决

解决方案

问题根因

你遇到的错误由两个常见原因导致:

  1. Rails 5.2+ 默认不再优先加载secrets.yml,而是使用加密凭据文件credentials.yml.enc存储敏感配置
  2. 你设置的Heroku环境变量大小写和代码中读取的变量名不匹配

修复步骤

  • 首先修正环境变量大小写,执行命令重新设置:
heroku config:set SECRET_KEY_BASE=$(rails secret)

执行后可以用heroku config:get SECRET_KEY_BASE确认大写的变量已经存在。

  • 如果你不想使用Rails加密凭据机制,修改config/initializers/devise.rb中jwt的密钥配置,直接读取环境变量即可:
    找到你代码里第312行左右的jwt配置块,把密钥部分改为:
Devise.setup do |config|
  # 其他配置省略
  config.jwt do |jwt|
    jwt.secret = ENV['SECRET_KEY_BASE']
    # 其他jwt配置省略
  end
end
  • 如果你想保留Rails加密凭据的使用方式,可以把本地config/master.key的内容设置为Heroku的环境变量:
heroku config:set RAILS_MASTER_KEY=<你本地master.key文件里的内容>

这种方式不需要修改devise的配置,Rails会自动用master.key解密credentials.yml.enc读取secret_key_base。

验证修复

修改后提交代码重新部署Heroku即可,部署过程中就不会再报secret_key_base缺失的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:03