ruby-on-rails - 在 Rails 6 中使用配置/凭据的正确方法是什么?如何阻止我的应用程序使用/tmp/development_secret?

标签 ruby-on-rails

我正在开发 Rails 应用程序,我正在尝试组织我的 Secret_key_base 和相关的重要 secret (例如 API key 、数据库凭据等)

我正在尝试找到一种在/config 下设置类似以下内容的方法

/config
credentials.yml.enc
master.key

/config/credentials
development.yml.enc
development.key
production.yml.enc
production.key
test.yml.enc
test.key

第一个问题: Secret_key_base 是否存在于/config/credentials.yml.enc 中,它被加载(首先?),然后为 Rails 运行的环境加载凭据?或者我应该为每个环境创建不同的secret_key_base?

第二个问题: 无论我做什么,当我在开发或测试中运行时,tmp/development_secret 首先加载。此外,每当我尝试访问开发中的 secret 时,(Rails.application.secret_key_base) 如下引用:What's the correct way of defining secret_key_base on Rails 6 ,我遇到了一个问题,在寻找我在development.yml.enc中定义的 secret 时,我只收到 nil ,我认为这是因为它没有加载该文件中的任何内容,它将进入 tmp/development_secret 并且找不到其他任何东西(也许我错了。)

目标:

  • 停止创建 tmp/development_secret,而是访问 使用特定 .yml.enc 文件的 secret 取决于 环境。
  • 了解/config/credentials.yml.enc 不存在的原因 在所有环境中加载。如果没有,则不清楚何时加载。

为什么?

  • 以 config/database.yml 为例,我想为每个环境存储不同的信用,但它们都不在版本控制中。 (我希望只有少数人才能进行生产。)但是,我希望在我的所有环境中以完全相同的方式访问它们。由于 .yml 文件问题而无法在生产环境中加载信用会使我的应用程序崩溃,因此我不想在测试/开发中以不同方式加载它们。
  • 整理一篇有关此内容的博客文章,因为搜索有关此功能的文档非常痛苦。这是一件非常简单的事情,因为只有 master.key 和 Production.key 需要作为 ENV 变量加载,这很棒。 (或者可能只是其中之一。)

这确实应该是一个简单的、开箱即用的东西,但很难找到有关最佳实践的真正文档。

最佳答案

我已经找到了答案,至少是我正在寻找的答案。您可以通过覆盖默认值让初始化程序加载您想要的任何文件。

  config.credentials.content_path = 'config/credentials/development.yml.enc'
  config.credentials.key_path = 'config/credentials/development.key'

https://edgeapi.rubyonrails.org/classes/Rails/Application.html

关于ruby-on-rails - 在 Rails 6 中使用配置/凭据的正确方法是什么?如何阻止我的应用程序使用/tmp/development_secret?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69215827/

相关文章:

ruby-on-rails - 根据 Rails 中的环境设置配置常量

javascript - 如何在 rails 中初始化 Angularjs ng-model

ruby-on-rails - 使用 Rails 搜索 MongoDB

ruby-on-rails - ActionMailer 响应 "501 5.5.4 Invalid argument"

ruby-on-rails - 为什么我们在 ruby​​ 中用 @@ 作为类变量的前缀?

ruby-on-rails - "Archive" rails 上的 table

ruby-on-rails - 你能加入另一个在 ARel 中不是关联的表吗?

ruby-on-rails - 设计和 Ruby on Rails : On Sign Up All Validations fail with "Can' t be Blank"

ruby-on-rails - 为什么 "assert_response"忽略 Rails 中的自定义消息?

ruby-on-rails - Mongoid 5 : find_one_and_update with returnNewDocument