我正在使用領班啓動我的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' –
這正是我所期待的。謝謝 –