Capistrano und API-Schlüssel in ENV-Variablen?

8

Ich stelle meine Rails-App mit Capistrano bereit. Ich möchte einige API-Schlüssel auf dem Server als Umgebungsvariable speichern. Diese API-Schlüssel sollten für meine Rails-App verfügbar sein, die mit Capistrano bereitgestellt wird. Auf diese API-Schlüssel sollte auch eine separate Ruby-Datei zugreifen können, die als Daemon ausgeführt wird.

Das Einstellen der API-Schlüssel in Umgebungsvariablen scheint die ideale Lösung zu sein, aber ich kann nicht auf sie in meiner Rails-App mit ENV["SOME_KEY"] zugreifen.

Nach diesem Beitrag , weil capistrano als nicht interaktiv und nicht als Login läuft, ~/.bashrc und ~/.bash_profile werden nicht geladen. Das Flussdiagramm schlägt vor, dass ich $BASH_ENV verwenden soll.

Kann ich einfach meine API-Schlüssel in $BASH_ENV hinzufügen und auf sie in meiner Rails-App und in der Ruby-Datei, die ein Daemon mit ENV["SOME_KEY"] ? ist, zugreifen?

Ich denke auch darüber nach, einfach die api-Schlüssel zu einer Datei irgendwo auf dem Server hinzuzufügen und sie mit dem Ruby-Dateiverzeichnis und dem rails-Verzeichnis zu verknüpfen und einfach zu öffnen und zu lesen. Wäre das möglich?

    
MeesterPatat 21.09.2016, 18:30
quelle

2 Antworten

12

Nach meiner Erfahrung gibt es einige Wege, die gut mit Capistrano funktionieren.

rbenv-vars

Wenn Sie Ruby über Rbenv auf Ihrem Server verwenden, haben Sie Glück. Es gibt ein Rbenv-Plugin namens rbenv-vars , das automatisch Umgebungsvariablen in jeden Ruby-Prozess einfügt, der Ihre Rails-App enthalten würde. Fügen Sie einfach Ihre Variablen zu ~/.rbenv/vars auf dem Server hinzu, indem Sie KEY=value syntax verwenden. Das war's.

dotenv

dotenv ist eine ähnliche Lösung, aber es funktioniert wie ein Juwel, das Sie Ihrer Rails-App hinzufügen und nicht benötigen Rbenv oder andere unterstützende Tools. Füge dotenv-rails zu deiner Gemdatei hinzu und stelle sie bereit. Dotenv sucht automatisch nach einer .env.production -Datei im Stammverzeichnis Ihrer Rails-App. Erstellen Sie für Capistrano eine .env.production -Datei auf dem Server in Capistranos shared -Verzeichnis und fügen Sie dann .env.production zu :linked_files hinzu. Jetzt wird jede Bereitstellung mit ihr verknüpft. Deklarieren Sie Ihre Variablen mit KEY=value syntax.

.bashrc

Deklarieren Sie Ihre Variablen mit export KEY=value syntax ganz oben in der ~/.bashrc -Datei auf dem Server. Unter Ubuntu wird diese Datei auch während einer nicht interaktiven SSH-Sitzung ausgewertet. Stellen Sie nur sicher, dass Sie die Deklarationen vor dieser Case-Anweisung oben platzieren:

%Vor%

CentOS kann eine andere Geschichte sein, also YMMV.

    
Matt Brictson 21.09.2016 23:52
quelle
1

Ich habe vor einiger Zeit ein Capistrano-Plugin capistrano-env_config erstellt, um Umgebungsvariablen in einem Capistrano-Cluster zu verwalten und zu synchronisieren Dies funktioniert, indem die Datei /etc/environment geändert wird, um Umgebungsvariablen im gesamten System verfügbar zu machen. Es ist einfach zu verwenden und ähnelt der Einstellung von Umgebungsvariablen mit dem Heroku-Werkzeuggürtel. Hier sind einige Beispiele:

%Vor%     
Itay Grudev 15.09.2017 19:19
quelle