22

私はforemanを使ってレール開発サーバーを起動しています。 .envファイルにすべての環境変数を入れることができてうれしいです。テスト環境に似たようなことをする方法はありますか?rspecにENV変数を設定するにはどうすればよいですか?

私はvcr gemで使用するAPIキーを設定したいが、APIをバージョンコントロールに追加したくない。テストスクリプトを起動するときに環境変数を手動で設定する以外にも、どんな提案もありますか?

答えて

23

dotenv gemを使用できます。これはforemanと同じ働きをし、.envファイルから読み込みます。 (およびテスト環境用.env.testファイル)

https://github.com/bkeepers/dotenv

+7

または、代替として、それらをもたらすことができますあなたは 'RAILS_ENV =テスト担当者がバンドルを走らせることができます。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

この回答は特別に優れています。なぜなら、 'Sinatra'のような最小限のフレームワークを使用する場合、特定の' gem'に特に依存しないアプローチを提供するからです。ありがとう! – fagiani

1

1つのオプションは、rspecコマンドのエイリアスをもう少し具体的にすることです。ドットファイル(.bashrcまたは.profileなど)に次の行を挿入します。

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

別のオプションは、特定の.envファイルで環境変数を置くことです:dotenv宝石を使用して

# .env.test 

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

は働くか、手動で

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