【发布时间】:2020-12-06 12:07:40
【问题描述】:
我有一个 Rails 6 应用程序部署到 Heroku 并且工作正常。我刚刚开始向应用程序添加一个 API,这在本地也可以正常工作,所有测试都在本地通过。
当我部署到 Heroku 时,应用正确响应 curl。
但是,在授权 JWT 令牌期间,我的测试(通过 Heroku CI 运行)以 TypeError: no implicit conversion of nil into String 失败。我已经确定了根本原因,即没有为我的测试加载 DEVISE_JWT_SECRET_KEY 环境变量。
这个变量被定义为一个 Heroku 环境变量,当我使用 curl 测试实际应用程序时工作正常,正如我所提到的。跑步
heroku config:get DEVISE_JWT_SECRET_KEY -a [APP_NAME]
返回正确的密钥。
当我在测试中添加一行来检查变量时,raise 在测试运行时被执行,表明变量丢失。
raise if ENV['DEVISE_JWT_SECRET_KEY'].nil?
谁能建议我在 Heroku 上运行测试时为什么没有加载环境变量?
【问题讨论】:
-
Protip 是使用
ENV.fetch('DEVISE_JWT_SECRET_KEY'),这将在 nil 时引发 KeyError。 -
我对“但是,我的测试失败”部分有点困惑 - 你是在 heroku 上运行单元测试吗?
-
@max 我在 Heroku 上运行集成测试,在我的 Pipeline 上使用 Heroku CI 系统。这是 Heroku CI 设计的用例。
-
我错过了 CI 部分 - 我以为你只是想在生产环境中从 heroku 运行器中运行它们。那将是个坏消息。
-
作为参考,@max,我在设计初始化程序中进行了更改以使用
ENV.fetch(),并且正如您所期望的那样,在初始化期间这会失败并出现 KeyError - 但仅在运行测试的 HerokuCI 上,不是当我重新启动测功机本身时。有什么想法吗?
标签: ruby-on-rails testing heroku environment-variables