在 rails 中设置测试环境变量而不输入源代码

Setting Test environment variables in rails without putting in source code

我在应用程序中使用 Twilio,在生产环境中,我使用 heroku 的 CLI 设置了身份验证令牌。我正在使用 sms-spec (https://github.com/monfresh/sms-spec) 在本地测试我的应用程序的 Twilio 集成。我想在测试环境中将 ENV['TWILIO_AUTH_TOKEN'] 设置为我的令牌。

每当我进行更改时,我都会使用 guard 来自动 运行 我的测试,因此我不想每次 运行 测试时都必须手动设置 ENV 变量。出于安全原因,我也不想将令牌放入我的源代码中。

有没有一种方法可以为我的本地测试环境设置 ENV 变量,使其永久不变,而不是在我的源代码中?我花了几个小时研究这个,但似乎找不到如何做到这一点的好解释。非常感谢任何帮助:)

两种方法:

  1. 使用像 Dotenv (link) 这样的 gem。这是我在大多数应用程序开发中使用的方法。只需在 gem 文件中包含 gem,捆绑安装,然后将任何环境变量设置存储在名为 .env 的顶级文件中。重新启动您的 rails 服务器,ENV 将自动加载。非常好用方便。
  2. 如果你在 ENV 部分比较灵活,并且你是 运行 Rails 4.1+,你可以使用 config/secrets/yml。这在 Rails 4.1 release notes 的第 2.2 节中有很好的记录。因此,在您的情况下,您可以这样设置:

    发展: twilio_auth_token: 非常机密的字符串

然后,在您的初始化程序中,您将使用 Rails.application.secrets.twilio_auth_token 而不是引用 ENV['TWILIO_AUTH_TOKEN']。我自己还没有尝试过,但它在我的列表中,因为我宁愿使用本机 Rails 功能也不愿使用单独的 gem.

当然,任何包含您的秘密的文件都需要小心保护。至少,确保包含在 .gitignore 中,这样您的秘密就不会进入您的代码存储库。