Ich habe ein Heroku-Projekt, das Umgebungsvariablen verwendet, um seine Konfiguration zu erhalten, aber ich verwende virtualenv, um meine App zuerst lokal zu testen.
Gibt es eine Möglichkeit, die auf dem Remotecomputer in virtualenv definierten Umgebungsvariablen festzulegen?
python
heroku
environment-variables
virtualenv
Mahmoud Hanafy
quelle
quelle
.env
Ihrer Information, es scheint, dass Dateien, die Heroku erstellt, zumindest meiner Erfahrung nach. Nehmen Sie es also nicht in Ihr Repo auf. Langjähriger Benutzer / großer Fan von autoenv übrigens. Hallo Kenneth, du da Mann!Wenn Sie virtualenvwrapper verwenden (ich empfehle dies dringend), können Sie verschiedene Hooks (voraktivieren, nachaktivieren, voraktivieren, nachaktivieren) mithilfe der Skripte mit denselben Namen in definieren
$VIRTUAL_ENV/bin/
. Sie benötigen den Postaktivierungshaken.Wenn Sie diese Konfiguration in Ihrem Projektverzeichnis behalten möchten, erstellen Sie einfach einen Symlink von Ihrem Projektverzeichnis zu
$VIRTUAL_ENV/bin/postactivate
.Sie können sogar die Erstellung der Symlinks bei jeder Verwendung von mkvirtualenv automatisieren .
Aufräumen beim Deaktivieren
Denken Sie daran, dass dies nicht nach sich selbst aufräumt. Wenn Sie die virtuelle Umgebung deaktivieren, bleibt die Umgebungsvariable bestehen. Zum symmetrischen Aufräumen können Sie hinzufügen
$VIRTUAL_ENV/bin/predeactivate
.Denken Sie daran, dass wenn Sie dies für Umgebungsvariablen verwenden, die möglicherweise bereits in Ihrer Umgebung festgelegt sind, das Deaktivieren dazu führt, dass diese beim Verlassen der virtuellen Umgebung vollständig deaktiviert werden. Wenn dies also überhaupt wahrscheinlich ist, können Sie den vorherigen Wert irgendwo vorübergehend aufzeichnen und ihn dann bei Deaktivierung wieder einlesen.
Konfiguration:
Prüfung:
quelle
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
hat bei mir nicht funktioniert.ln
will einen vollen Weg, also musste ich tunln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.ln
volle Wege mag, also habe ich das versucht und es hat funktioniert. Als ich versuchte,cat
den Symlink mit dem relativen Pfad zu erstellen, hieß esNo such file or directory
.Du könntest es versuchen:
in virtualenv_root / bin / enable. Grundsätzlich wird das Aktivierungsskript ausgeführt, wenn Sie die virtuelle Umgebung verwenden, damit Sie alle Ihre Anpassungen dort vornehmen können.
quelle
deactivate
definierten Funktion virtualenv_root / bin / enabled hinzufügen, um das Einstellen und Deaktivieren auszugleichenWenn Sie nur virtualenv (ohne virtualenvwrapper ) verwenden, können Sie Umgebungsvariablen über das von
activate
Ihnen bezogene Skript einfach festlegen, um virtualenv zu aktivieren.Lauf:
Fügen Sie die Umgebungsvariablen wie folgt am Ende der Datei hinzu:
Sie können auch einen ähnlichen Hook festlegen, um die Umgebungsvariable zu deaktivieren, wie von Danilo Bargen in seiner großartigen Antwort oben vorgeschlagen, falls erforderlich.
quelle
cd
nur um Umgebungsvariablen zu haben? SchauderObwohl es hier viele nette Antworten gibt, wurde keine Lösung veröffentlicht, die sowohl das Deaktivieren von Umgebungsvariablen beim Deaktivieren enthält als auch keine zusätzlichen Bibliotheken darüber hinaus erfordert.
virtualenv
Hier ist meine Lösung, die nur das Bearbeiten / Bin / Aktivieren mithilfe von VariablenMY_SERVER_NAME
undMY_DATABASE_URL
als Beispiele:Das Aktivierungsskript sollte eine Definition für Deaktivierung enthalten, und Sie möchten Ihre Variablen am Ende deaktivieren:
Legen Sie dann am Ende des Aktivierungsskripts die Variablen fest:
Auf diese Weise müssen Sie nichts anderes installieren, damit es funktioniert, und es bleiben keine Variablen übrig, wenn Sie
deactivate
die virtuelle Umgebung verwenden.quelle
Lokal innerhalb einer virtuellen Umgebung gibt es zwei Methoden, mit denen Sie dies testen können. Das erste ist ein Tool, das über den Heroku-Toolbelt (https://toolbelt.heroku.com/) installiert wird. Das Werkzeug ist Vorarbeiter. Es exportiert alle Ihre Umgebungsvariablen, die lokal in einer ENV-Datei gespeichert sind, und führt dann App-Prozesse in Ihrer Procfile aus.
Der zweite Weg, wenn Sie nach einem leichteren Ansatz suchen, besteht darin, eine .env-Datei lokal zu haben und dann auszuführen:
quelle
Installieren Sie autoenv entweder von
(oder)
Erstellen
.env
Sie anschließend eine Datei in Ihrem virtualenv-ProjektordnerJetzt funktioniert alles gut.
quelle
Wenn Sie Heroku bereits verwenden, sollten Sie Ihren Server über Foreman ausführen . Es unterstützt eine
.env
Datei, bei der es sich lediglich um eine Liste von Zeilen handeltKEY=VAL
, die vor der Ausführung in Ihre App exportiert werden.quelle
Eine andere Möglichkeit, die für Django entwickelt wurde, aber in den meisten Einstellungen funktionieren sollte, ist die Verwendung von Django-Dotenv.
quelle
So aktivieren Sie virtualenv im
env
Verzeichnis und exportieren die verwendeten.env
Verwendungsvariablen:quelle
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases