22

我正在使用領班啓動我的rails開發服務器。很高興我可以將我所有的環境變量放在.env文件中。有沒有辦法爲我的測試環境做類似的事情?如何獲取爲rspec設置的ENV變量?

我想設置一個API密鑰,我將與vcr gem一起使用,但我不想將該API添加到版本控制。除了手動啓動測試腳本時手動設置環境變量以外的任何建議?

回答

23

您可以使用dotenv gem ---它的工作方式與領班相同,並從.env文件加載。 (和你的測試環境中.env.test文件)

https://github.com/bkeepers/dotenv

+7

令他們或作爲替代,你可以'RAILS_ENV =測試工頭運行bundle exec rspec spec' –

+0

這正是我所期待的。謝謝 –

26

如果你只需要設置環境變量,您可以通過命令行設置它們:

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'

+0

這個答案特別好,因爲它提供的方法不會依賴任何特定的'gem',特別是在使用簡單的框架如'Sinatra'時。謝謝! – fagiani

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寶石的作品也可以在手動

$ export $(cat .env.test) && rspec