如何在部署中更新 Rails 5.2 凭据和主密钥



将Rails 4应用程序升级到Rails 5.2,对管理秘密变量的新主密钥和凭据方法感到困惑。在谷歌上做了相当多的搜索,但找不到答案。

我的理解是,在地方发展中,

  • 主密钥将在config/master.key上生成,不会提交到git repo。
  • 它用于加密config/credentials.yml.enc中的秘密变量。
  • 我可以通过 EDITOR=vim 轨道添加或更新机密变量 凭据:编辑

因此,在本地开发中,我将数据库密码添加到config/credentials.yml.enc中,并提交到git repo中。(注意:这是我的本地数据库密码。

但问题有以下两种情况:

  1. 另一个开发人员签出代码,并尝试在他的本地环境中运行。它将失败,因为他没有主密钥。即使我可以通过其他一些方法将主密钥共享给他,它仍然假设他的本地数据库密码与我的相同,这通常不是事实。对他来说,更改秘密变量值并再次提交是没有意义的。那么它将如何在多开发人员协作中工作呢?
  2. 在生产部署方面,它变得更加重要。生产环境中的机密变量应与本地开发环境不同。那么如何在部署过程中更改秘密变量值呢?例如,如何自动化 EDITOR=vim rails 凭据:编辑,就像通过一些 shell 脚本一样?

我觉得这两个问题都应该是幼稚的,这些都是典型的场景,一定是考虑过的,但真的让我很困惑......请帮我理解,谢谢!

我不相信您可以在加密凭据中引用环境变量。因此,请将database.yml文件保留为使用 ENV 而不是开发标题下的加密凭据。您可以使用 CONSTANT (如 ENCRYPTED_CREDENTIALS (在 application.rb 中为每个环境分配凭据。然后,在生产标题下的database.yml中使用ENCRYPTED_CREDENTIALS

这两个文件加上您的加密凭据应如下所示(为简洁起见,已缩短(。请注意加密凭据如何仅使用生产database.yml因为开发标题未使用加密凭据:


config/application.rb

ENCRYPTED_CREDENTIALS = Rails.application.credentials[Rails.env.to_s.to_sym]

config/database.yml

development:
  username: <%= ENV["DATABASE_USER"] %>
production:
  username: ENCRYPTED_CREDENTIALS[:database_user]

rails credentials:show

production:
  database_user: some_username

最新更新