如果我仍然需要从环境中加载变量,那么secretts.yml的意义何在?

时间:2016-06-22 05:17:43

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

我决定使用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"] %>

正如您所看到的,对于生产部分,它表示&#34;不要将生产机密保留在存储库中,而是从环境中读取值&#34;

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

设置和转换从开发到生产过程的变量一直困扰着我很长一段时间。我一直试图到处寻找但从开始到结束似乎没有人真正清楚这个过程。所以,对不起,如果这看起来像是一个愚蠢的问题。

3 个答案:

答案 0 :(得分:1)

secrets.yml 不应该用于保留生产密钥。原因是您不希望将它们提交到版本控制。这不安全。

这个文件提供了一些很好的好处,你可能会忽略:

  1. 您可能实际上需要将您的秘密在不同环境中设置为不同的值 - 在开发模式下使用生产密钥可能不需要或不可取。 例如。 AWS_BUCKET_NAMEdevelopment vs production

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

  3. 有关生产中存在哪些密钥的文档很有帮助,即使值不正确也是如此。

  4. 提示:您可以使用一个命令在终端中设置所有env变量。只需列出所有内容。

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

答案 1 :(得分:1)

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

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

production:
  secret_key_base: some_big_random_secret_here

答案 2 :(得分:-1)

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

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

<script src="/socket.io/socket.io.js"></script>

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

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

Refer Here For More Details