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?
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:
CentOS kann eine andere Geschichte sein, also YMMV.
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:
Tags und Links ruby ruby-on-rails api environment-variables capistrano