22

Ich benutze Vorarbeiter, um meinen Rails-Entwicklungsserver zu starten. Es ist schön, dass ich alle meine Umgebungsvariablen in die Datei .env legen kann. Gibt es eine Möglichkeit, etwas ähnliches für meine Testumgebung zu tun?Wie bekomme ich eine ENV-Variable für rspec?

Ich möchte einen API-Schlüssel festlegen, den ich mit dem Edelstein vcr verwenden werde, aber ich möchte die API nicht zur Versionskontrolle hinzufügen. Irgendwelche Vorschläge außer die Umgebungsvariable manuell zu setzen, wenn ich mein Testscript starte?

Antwort

23

Sie können das Dotenv-Juwel verwenden - es funktioniert genauso wie Vorarbeiter und Laden von einer .env-Datei. (Und eine .env.test Datei für Ihre Testumgebungen)

https://github.com/bkeepers/dotenv

+7

oder als Alternative in Hand bringen , Sie können 'RAILS_ENV = Vorarbeiter testen, führen Sie Bündel Exec specsp ' –

+0

Das ist genau, was ich suchte. Danke –

26

Wenn Sie nur Umgebungsvariablen müssen, können Sie entweder sie von Befehlszeile:

SOMETHING=123 SOMETHING_ELSE="this is a test" rake spec 

Oder Sie folgendes an der Spitze Ihres Rakefile oder spec_helper.rb definieren könnte:

ENV['SOMETHING']=123 
ENV['SOMETHING_ELSE']="this is a test" 

Wenn sie gelten nicht immer, können Sie eine bedingte verwenden:

if something_needs_to_happen? 
    ENV['SOMETHING']=123 
    ENV['SOMETHING_ELSE']="this is a test" 
end 

Wenn Sie eine Foreman .env Datei zu verwenden, die wie folgt aussieht:

SOMETHING=123 
SOMETHING_ELSE="this is a test" 

und es in den folgenden und eval es:

ENV['SOMETHING']='123' 
ENV['SOMETHING_ELSE']='this is a test' 

Sie tun könnten:

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 

obwohl ich nicht denke, das würde für mehrzeilige Werte funktionieren.

Und wie @JesseWolgamott angemerkt, sieht es so aus, als könnten Sie gem 'dotenv-rails' verwenden.

+0

Diese Antwort ist besonders gut, weil sie Ansätze bietet, die sich nicht auf ein bestimmtes "Juwel" verlassen, speziell wenn man minimalistische Frameworks wie 'Sinatra' verwendet. Vielen Dank! – fagiani

1

Eine Option ist es, den Befehl rspec etwas alias zu nennen, um etwas spezifischer zu sein. Schreibe die folgende Zeile in deine dotfiles (.bashrc oder .profile oder so).

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

Eine weitere Option ist die Umgebungsvariablen in bestimmten .env Dateien zu setzen:

# .env.test 

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

Mit dem dotenv gem funktioniert oder Sie können sie

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