2016-07-18 10 views
2

Ich habe auf Heroku entwickelt, mit den config Variablen, um empfindliche und andere Umgebungsvariablen zu speichern. Bei der lokalen Entwicklung habe ich diese Variablen in der Datei .env gespiegelt.Umgebungsvariablen von .env-Datei nicht verfügbar während lokaler Migrationen in Django, Heroku

Was ich jetzt finde, ist die Variablen aus der Datei .env laden nicht während Migrationen. Sie werden beim Ausführen des lokalen Webservers mit heroku local geladen, aber nicht für Migrationen geladen. Dies war kein Problem, während meine lokale App immer noch die Standard-SQLite3-Datenbank verwendete, da die SQL-Standard-DB in der Einstellungsdatei "fest codiert" war. In letzter Zeit möchte ich jedoch meine lokale Postgresql-Datenbank für lokale Entwickler verwenden. OK, also habe ich die DATABASE_URL Variable meiner .env Datei hinzugefügt.

Ich kann meine lokale App nicht auf die DB migrieren. Ich habe herausgefunden, dass dies daran liegt, dass der Dateiinhalt .env nicht zu den Migrationsdaten os.environ hinzugefügt wird.

Um zu testen, habe ich eine Testvariable auf die .env Datei:

TEST="teeeest" 

Dann in settings.py:

import os 
import dj_database_url 

if "TEST" not in os.environ: 
    raise Exception("No .env vars found.") 

I python manage.py migrate versucht:

Datei „/ Users/apple/heroku/b/b/settings.py ", Zeile 16, in raise Exception (" Nein .env vars found. ") Ausnahme: Keine .env vars gefunden.

Allerdings kann ich heroku local laufen und es gibt keinen Fehler. Ich habe auch weitere Tests durchgeführt, um sicherzustellen, dass die Variablen .env während heroku local verfügbar sind.

Aus verschiedenen Gründen möchte ich meine lokale DB-Verbindungszeichenfolge in der Datei .env einstellen, scheint aber momentan nicht möglich. Ist das das richtige Verhalten für Django auf Heroku? .env Dateivariablen sind nur zugänglich, wenn Sie den Server ausführen und nicht für Migrationen?

Antwort

1

manage.py weiß nichts über Ihre .env-Datei. Sie müssen den Befehl unter etwas ausführen, das tut; entweder Foreman, was Heroku selbst verwendet, oder Honcho, was eine Python-Implementierung ist.

+1

ich eigentlich dachte, es nur nach einem langen Wochenend- aus> 'Heroku local: run Python manage.py migrate'. https://devcenter.heroku.com/articles/heroku-local#run-your-app-locally-using-the-heroku-local-common-line-tool-run-a-one-off-command-locally –