部署Rails应用到Heroku报KeyError: key not found: secret_key_base如何解决
解决方案
问题根因
你遇到的错误由两个常见原因导致:
- Rails 5.2+ 默认不再优先加载
secrets.yml,而是使用加密凭据文件credentials.yml.enc存储敏感配置 - 你设置的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
相关产品推荐
相关产品推荐

