在 github 操作上运行测试时,Rails 凭证值为零
Posted
技术标签:
【中文标题】在 github 操作上运行测试时,Rails 凭证值为零【英文标题】:Rails credential values are nil while running tests on github actions 【发布时间】:2021-05-22 05:24:13 【问题描述】:我正在使用 Rails secret_key_base 对 JSON Web 令牌进行编码和解码,我的 secret_key_base 位于 credentials.yml.enc 文件中。在其中一项测试中,我使用此函数来解码 JWT,本地测试运行良好,但在 github 操作上它失败了,我发现 Rails.application.crendentials.secret_key_base 的值在运行测试时为 nil github 动作。我通过像这样模拟来修复这些测试
allow(Rails.application.credentials).to receive(:secret_key_base).
and_return("secret")
有没有一种方法我不必在 github 操作上为其他凭据执行此操作。另外由于没有提交 master.key 我希望我会看到这个错误
ActiveSupport::MessageEncryptor::InvalidMessage
在读取凭证文件时,但这也没有发生。 如果可以解决问题,这是我项目的link。
【问题讨论】:
【参考方案1】:在 Rails 6 中,您可以为每个环境创建 credentials.yml.enc 文件。
在 vscode 中:
EDITOR="code --wait" rails credentials:edit --environment production
EDITOR="code --wait" rails credentials:edit --environment test
它会给你production.key, production.yml.enc, test.key, test.yml.enc
。
然后,您可以将test.key
提交到 github 进行测试,甚至更好,将此密钥设置在 RAILS_TEST_KEY
env 中。
虽然维护两个 env 文件有点棘手。您可以使用空环境创建 credenetials.yml.example
文件以供参考
【讨论】:
【参考方案2】:我认为“最干净/正确的方法”是将主密钥(来自 config/master.key 的值)添加到 github 机密中。
转到存储库设置->秘密(左侧菜单)->新存储库秘密。 将其命名为 RAILS_MASTER_KEY 是有意义的。 然后在你的工作流文件中添加
env:
RAILS_MASTER_KEY: $ secrets.RAILS_MASTER_KEY
就是这样,Rails 将足够聪明,可以在凭据解密中使用该变量。
无需制作额外的凭据文件。对我来说,它只使用一个 credentials.yml.enc
编辑:更好的是,如果您可以跳过使用凭据,请添加 heroku 配置变量 SECRET_KEY_BASE
和 config/application.rb
添加
config.secret_key_base = ENV['SECRET_KEY_BASE']
用于生产用途Rails.configuration.secret_key_base
,
用于测试/开发Rails.application.secrest.secret_key_base
,由 rails 设置
例如
SECRET_KEY = Rails.env.production? ? Rails.configuration.secret_key_base : Rails.application.secrets.secret_key_base
这样您就不必在每台运行您的应用程序的机器上存储主密钥。前任。同事、github 操作、登台、生产。
【讨论】:
以上是关于在 github 操作上运行测试时,Rails 凭证值为零的主要内容,如果未能解决你的问题,请参考以下文章
Rails:找不到 JavaScript 运行时。有关可用运行时的列表,请参阅 https://github.com/sstephenson/execjs。 (ExecJS::RuntimeUnava