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

时间:2015-07-02 23:26:39

标签: ruby-on-rails ruby testing test-environments

我使用Twilio作为应用程序并在生产中使用heroku的CLI设置auth令牌。我正在使用sms-spechttps://github.com/monfresh/sms-spec)在本地测试我应用的Twilio集成。我想在测试环境中将ENV['TWILIO_AUTH_TOKEN']设置为我的令牌。

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

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

1 个答案:

答案 0 :(得分:1)

两种方法:

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

    发展:   twilio_auth_token:verysecretstring

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

    当然,任何包含您机密的文件都需要谨慎保护。至少,请确保包含在.gitignore中,以便您的秘密无法进入代码库。