45

我正在使用工头来启动我的 Rails 开发服务器。很高兴我可以将所有环境变量都放在.env文件中。有没有办法为我的测试环境做类似的事情?

我想设置一个用于vcrgem 的 API 密钥,但我不想将 API 添加到版本控制中。除了在我启动测试脚本时手动设置环境变量之外还有什么建议吗?

4

3 回答 3

41

如果您只需要设置环境变量,您可以从命令行设置它们:

SOMETHING=123 SOMETHING_ELSE="this is a test" rake spec

或者您可以在 Rakefile 或 spec_helper.rb 的顶部定义以下内容:

ENV['SOMETHING']=123
ENV['SOMETHING_ELSE']="this is a test"

如果它们并不总是适用,您可以使用条件:

if something_needs_to_happen?
  ENV['SOMETHING']=123
  ENV['SOMETHING_ELSE']="this is a test"
end

如果你想使用一个 Foreman.env文件,它看起来像:

SOMETHING=123
SOMETHING_ELSE="this is a test"

并将其转换为以下内容并对其进行评估:

ENV['SOMETHING']='123'
ENV['SOMETHING_ELSE']='this is a test'

你可能会这样做:

File.open("/path/to/.env", "r").each_line do |line|
  a = line.chomp("\n").split('=',2)
  a[1].gsub!(/^"|"$/, '') if ['\'','"'].include?(a[1][0])
  eval "ENV['#{a[0]}']='#{a[1] || ''}'"
end

尽管我认为这不适用于多行值。

正如@JesseWolgamott 指出的那样,您似乎可以使用gem 'dotenv-rails'.

于 2013-05-31T04:22:37.913 回答
32

您可以使用 dotenv gem --- 它的工作原理与工头​​相同,并从 .env 文件加载。(以及您的测试环境的 .env.test 文件)

https://github.com/bkeepers/dotenv

于 2013-05-31T01:50:59.957 回答
2

一种选择是将 rspec 命令别名为更具体一点。将以下行放入您的点文件(.bashrc或其他内容.profile)中。

alias 'rspec'='RACK_ENV=test RAILS_ENV=test bundle exec rspec'

另一种选择是将环境变量放在特定的 .env 文件中:

# .env.test

RAILS_ENV=test
MONGODB_URI=mongodb://localhost/test
# .. etc ..

使用dotenvgem 工作,或者您可以手动将它们带入

$ export $(cat .env.test) && rspec
于 2014-05-06T17:47:09.517 回答