我正在使用领班启动我的rails开发服务器。很高兴我可以将我所有的环境变量放在.env
文件中。有没有办法为我的测试环境做类似的事情?如何获取为rspec设置的ENV变量?
我想设置一个API密钥,我将与vcr
gem一起使用,但我不想将该API添加到版本控制。除了手动启动测试脚本时手动设置环境变量以外的任何建议?
我正在使用领班启动我的rails开发服务器。很高兴我可以将我所有的环境变量放在.env
文件中。有没有办法为我的测试环境做类似的事情?如何获取为rspec设置的ENV变量?
我想设置一个API密钥,我将与vcr
gem一起使用,但我不想将该API添加到版本控制。除了手动启动测试脚本时手动设置环境变量以外的任何建议?
您可以使用dotenv gem ---它的工作方式与领班相同,并从.env文件加载。 (和你的测试环境中.env.test文件)
如果你只需要设置环境变量,您可以通过命令行设置它们:
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
如果你想使用一个工头.env
文件,它看起来像:
SOMETHING=123
SOMETHING_ELSE="this is a test"
,并把它变成以下和eval它:
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'
。
这个答案特别好,因为它提供的方法不会依赖任何特定的'gem',特别是在使用简单的框架如'Sinatra'时。谢谢! – fagiani
一种选择是别名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
宝石的作品也可以在手动
$ export $(cat .env.test) && rspec
令他们或作为替代,你可以'RAILS_ENV =测试工头运行bundle exec rspec spec' –
这正是我所期待的。谢谢 –