私はフォアマンを使用して私のRails開発サーバーを起動しています。すべての環境変数を.env
ファイル。テスト環境で同様のことを行う方法はありますか?
vcr
gemで使用するAPIキーを設定したいのですが、バージョン管理にAPIを追加したくありません。テストスクリプトを起動するときに環境変数を手動で設定する以外の提案はありますか?
Dotenv gemを使用できます--- foremanと同じように機能し、.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"
そしてそれを次のように変えて評価します:
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つのオプションは、rspecコマンドのエイリアスをもう少し具体的にすることです。次の行をdotfiles(.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