我在Heroku上第一次部署我的应用时收到错误“发生了未处理的低级错误”,heroku logs
显示:
为'生产'环境缺少
secret_key_base
,请设置此值 在config/secrets.yml
1)默认secrets.yml
指定生产的secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
2)我使用rails secret
生成了一个秘密,然后通过heroku config:set SECRET_KEY_BASE='(the key)'
3)heroku config
显示为SECRET_KEY_BASE
4)也许最重要的是,基于有关此错误的旧问题,.gitignore
包含secrets.yml
- 这是为Rails 5应用生成的默认.gitignore 。因此,应该在我的应用程序中部署secrets.yml
,该应用程序指定通过生产环境中的环境变量加载秘密。
5)我还运行heroku ps:restart
,以防应用程序需要一些额外的帮助才能使环境变量设置生效
我读过较旧的帖子,但过去的答案似乎是确保secrets.yml
未包含.gitignore
,但如上所述,这不适用于默认的Rails 5 .gitignore
。
我还能尝试什么? THX。
编辑:当我在命令行设置配置值时,我也收到了Heroku消息:
设置SECRET_KEY_BASE并重启(应用程序)...完成
答案 0 :(得分:2)
好的,我看到发生了什么。运行heroku run bash
并检查部署了哪些文件具有启发性。
secrets.yml
确实不在我本地仓库的.gitignore
文件中,但似乎某人 - 可能是恶意黑客,可能是小鬼 - 已将secrets.yml
添加到我的全局.gitignore(.gitignore_global
),因此该文件实际上而非被推送到Heroku。
我已从我的全局.gitignore中删除了秘密文件,将开发和测试环境密钥卸载到dotenv进行管理,并且可以成功运行我已部署的应用程序。
我考虑过删除这个问题,但是如果其他人遇到这个问题,我会留下这个问题,甚至是在使用Heroku上的应用程序诊断问题时使用heroku run bash
可能会有帮助的类似问题。