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

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

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

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

两种方法:

  1. 使用像Dotenv这样的gem( 链接 )。 这是我在大多数开发应用程序中使用的方法。 只需在gemfile中包含gem,捆绑安装,然后将任何环境变量设置存储在名为.env的顶级文件中。 重启rails服务器,ENV将自动加载。 非常好用,方便。
  2. 如果你对ENV部分很灵活,并且你正在运行Rails 4.1+,你可以使用config/secrets/yml 。 在第2.1节的Rails 4.1发行说明中很好地记录了这一点。 那么,在你的情况下,你会这样设置:

    开发:twilio_auth_token:verysecretstring

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

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