【问题标题】:What's the point of secrets.yml if I still have to load variables from environment?如果我仍然必须从环境中加载变量,那么 secrets.yml 有什么意义?
【发布时间】:2016-06-22 05:17:42
【问题描述】:

我决定使用 secrets.yml 文件来轻松将变量传输到应用程序的生产服务器。打开文件后,我注意到的是:

development:
  secret_key_base: 61a3857f1ddc140836......

test:
  secret_key_base: 6041df556cf0feb5e.....

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

如您所见,对于生产部分,它说“不要在存储库中保留生产机密,而是从环境中读取值”

我不了解其他人,但对我来说很明显,如果我这样做,它将完全违背 secrets.yml 本身的目的。我想自己使用secrets.yml,这样我就不必再通过生产服务器上的终端一一设置环境变量了,但是如果我现在使用secrets.yml仍然需要这样做,那有什么意义呢?

设置变量并将变量从开发过程转移到生产过程已经困扰我很长时间了。我一直在尝试到处寻找,但似乎没有人真正清楚从头到尾的过程。所以,对不起,如果这看起来是一个愚蠢的问题。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    secrets.yml 不应用于保存生产密钥。原因是您不想将它们提交给版本控制。不安全。

    此文件提供了一些您可能忽略的好处:

    1. 您实际上可能需要您的密钥在不同环境中具有不同的值 - 在开发模式下使用生产密钥可能不需要或不希望。 例如。 AWS_BUCKET_NAME: development vs production

    2. 您的某些代码可能依赖于密钥的存在,nil 值可能会破坏程序。

    3. 记录生产环境中存在哪些键会很有帮助,即使值不正确。

    提示:您可以使用一个命令在终端中设置所有环境变量。把它们都列出来。

    config:set FIRST_SECRET=value SECOND_SECRET=value THIRD_SECRET=value ...
    

    【讨论】:

    • 这正是我所关心的。因此,假设我必须在生产中更新我的环境变量,并且每次我必须通过 ssh 连接到服务器时,键入命令来设置一个新变量。随着我不断添加越来越多的变量,我将很难跟踪它们。这种方法对我来说很乱,看起来没有条理。那么它还有其他方法吗?
    【解决方案2】:

    这只是一个 yaml 文件。它可以包含任何内容,特别是如果您在版本控制中没有它。

    在我工作的地方,我们不将 secrets.yml 包含在版本控制中(我也不喜欢到处管理 ENV 变量)。我们所有的登台和生产机器只在生产模式下运行。如果 secrets.yml 文件不存在,则会在部署过程中自动创建它。这是在没有开发人员干预的情况下完成的,并且大多数用户无法访问该文件。生成的文件内容如下:

    production:
      secret_key_base: some_big_random_secret_here
    

    【讨论】:

    • 我非常了解 yaml 文件的用途。我担心的是,在 rails 生成的默认 secrets.yml 中,它提到了 Do not keep production secrets in the repository, instead read values from the environment" 。它显示了这样的示例:secret_key_base: &lt;%= ENV["SECRET_KEY_BASE"] %&gt;。那么,这个例子不正确吗?我应该继续像这样secret_key_base: 123456789.. 编码吗?
    • 是的,这是正确的,假设您的 secrets.yml 文件未检入版本控制。
    【解决方案3】:

    Rails 在 config 文件夹中生成一个新的 secrets.yml 文件。默认情况下,此文件包含应用程序的 secret_key_base,但它也可用于存储其他机密,例如外部 API 的访问密钥。

    添加到这个文件的秘密可以通过 Rails.application.secrets 访问。例如,使用以下 config/secrets.yml:

    development:
      secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
      some_api_key: SOMEKEY
    

    Rails.application.secrets.some_api_key 在开发环境中返回 SOMEKEY。

    请参阅升级 Ruby on Rails 指南,了解如何迁移现有应用程序以使用此功能。

    Refer Here For More Details

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多