我正在使用工头启动我的rails开发服务器。我可以将所有环境变量放在.env
文件中,这很好。有没有办法为我的测试环境做类似的事情?
我想设置一个我将与vcr
gem一起使用的API密钥,但我不想将API添加到版本控制中。除了在启动测试脚本时手动设置环境变量之外的任何建议吗?
答案 0 :(得分:30)
如果您只需要设置环境变量,可以从命令行设置它们:
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'
。
答案 1 :(得分:26)
你可以使用dotenv gem ---它与foreman一样工作,并从.env文件加载。 (以及测试环境的.env.test文件)
答案 2 :(得分:1)
一种选择是将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 ..
使用dotenv
gem工作,或者您可以手动将它们带入
$ export $(cat .env.test) && rspec