Mehrere Umgebungen für Ruby-Anwendungen

9

Ich habe so lange Rails-Apps geschrieben, dass ich plötzlich an etwas festhalte, das man kostenlos mit Rails: environments bekommt.

Das heißt, Sie können die Rails App lokal ausführen und RAILS_ENV (oder Rails.env) ist standardmäßig "development". Und wenn Sie Ihre Spezifikationen / Tests ausführen, ist es "Test" und wenn Sie auf Ihrem Produktionsserver bereitstellen, richten Sie es als "Produktion".

Dies ist besonders nützlich, wenn Sie Konfigurationsdateien haben. Auch nützlich für die Gemfile, um Edelsteine ​​für bestimmte Umgebungen zu unterscheiden.

Nun zu meiner Frage: Ich schreibe eine reine Ruby-App und ich weiß nicht, wie ich sie am besten einrichten kann, damit ich immer noch die verschiedenen Umgebungen haben kann? Ich möchte Konfigurationsdateien für 3rd-Party-Dienste (wie MongoLab / Iron.IO / etc.) Einrichten, aber ich möchte, dass sie mit "Entwicklung", "Test", "Produktion" usw. eingerichtet werden. Und dann möchte ich sein kann die App aus verschiedenen Umgebungen ausführen.

Ich weiß, dass ich es manuell über Kommandozeilen-Umgebungsvariablen handhaben könnte, aber ich frage mich, ob es dafür die besten (besseren?) Praktiken gibt? Irgendwelche Edelsteine, die dabei helfen? Oder irgendwelche Empfehlungen zum Strukturieren der Umgebungsbehandlung für eine reine Ruby-App?

Danke,

    
Dan Sharp 28.04.2015, 16:13
quelle

3 Antworten

2

Du könntest so etwas wie die Schiene machen:

%Vor%

Dann legen Sie die Umgebungsvariable über Rake-Aufgaben fest.

%Vor%

Hinzugefügt.

Mit Bundler ist es ziemlich einfach, verschiedene Sets von Edelsteinen pro Umgebung zu verwenden.

Sie könnten diese Zeile von config/application.rb in rails:

erkennen %Vor%

Dies teilt Bundler mit, dass alle Edelsteine ​​in einer bestimmten Gruppe erfordern und zusätzlich zu Edelsteinen, die außerhalb einer Gruppe deklariert sind

%Vor%     
max 28.04.2015, 16:46
quelle
0

Wenn Sie nur über Konfigurationsdateien sprechen, können Sie einfach ein Setup verwenden, das wie die database.yml -Datei von Rail aussieht, es einlesen und den "richtigen" Satz von Variablen auswählen.

Es gibt auch mindestens ein Juwel , um mit solchen "mehrstufigen" Konfigurationsdateien umzugehen.

    
averell 28.04.2015 18:35
quelle
0

Verwenden Sie ENV['RACK_ENV'] . RAILS_ENV ist eigentlich nur eine Kopie davon.

Verwenden Sie andere ENVs, um Ihre Abhängigkeiten zu verwalten. Zum Beispiel können Anmeldeinformationen und Konfigurationen in ENVs gespeichert werden.

Einige ENVs werden normalerweise in einer Konfigurationsdatei wie database.yml oder mongoid.yml gespeichert.

Sie können das dotenv Juwel verwenden, um Ihre lokalen ENVs zu verwalten. Ich bevorzuge jedoch ein Ruby- oder Shell-Skript, das die ENVs einstellt und / oder den Server in der Entwicklungsumgebung startet:

local_setup.rb:

%Vor%

oder

rackup_local.sh:

%Vor%

Sie können ein ähnliches Skript für die Testkonfiguration verwenden und im Spec-Helper anfordern. Ich bevorzuge es, die Configs am Anfang des Spezifikationshelfers hinzuzufügen.

Wenn Sie secrets in Ihr env-Skript einfügen, achten Sie darauf, es zu ignorieren und es nicht zu Ihrem Repo hinzuzufügen.

Bezüglich der Gemfile ist es keine gute Idee, verschiedene Edelsteine ​​für verschiedene Umgebungen zu verwenden, es sei denn, es gibt einen guten Grund dafür. Testen, Debuggen und Zwischenspeichern sind gute Beispiele dafür, dass Sie sich in einer Umgebungsgruppe in der Gemfile befinden.

    
B Seven 28.04.2015 16:46
quelle