在github操作上运行测试时,Rails凭据值为nil



我正在使用Rails secret_key_base编码和解码JSON web令牌,我的secret_key_base在credential .yml.enc文件中。在其中一个测试中,我使用这个函数来解码JWT,在本地测试运行良好,但在github操作上它失败了,我发现了rails .应用程序.凭据的值。在github action上运行测试时,Secret_key_base为nil。我修复了这些测试,模拟如下

allow(Rails.application.credentials).to receive(:secret_key_base).
and_return("secret")

是否有一种方法我不必在github上为其他凭据执行此操作。亦自大师。我希望我能看到这个错误

ActiveSupport::MessageEncryptor::InvalidMessage

同时读取凭据文件,但这也没有发生。这是一个链接到我的项目,如果你清楚的东西。

在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_KEYenv中设置此键。

虽然维护两个env文件有点棘手。您可以创建带有空envs的credenetials.yml.example文件以供参考

我认为'最干净/正确的方式'做到这一点是添加主密钥(值从config/master.key)到github的秘密。

转到存储库设置->secrets(左侧菜单)->new repository secret。将其命名为RAILS_MASTER_KEY是有意义的。然后在你的工作流文件中添加

env:
RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}

就是这样,Rails将足够聪明地在凭证解密中使用该变量。

不需要制作额外的凭证文件。对我来说,它只使用一个凭据。myl .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动作,登台,生产。

相关内容

最新更新