2015-06-23 5 views
5

Ich versuche auf Werte der OS Environment-Variable zuzugreifen und sie in settings.py zu holen. Während der Debug-Anwendung bekomme ich keinen Wert dafür Aufzeichnung. Hier sind weitere Details:django settings.py os.environ.get ("X") nicht richtige Werte abrufen

Es gibt einige wichtige/geheime Schlüssel, die nicht in Code freigegeben werden können, so dass diese in OS-Umgebungsvariablen exportiert werden. Immer wenn ich $ KEY_VAL von Linux Terminal oder Python Shell (manage.py shell) zurückmelde, druckt es den korrekten Wert meiner Umgebungsvariablen.

Aber beim Debuggen der Anwendung zeigt es, dass der Wert None ist. Ich verwende IPDB Debugger und Druckwert mit dem Befehl folgende None als Ergebnis liefert:

p settings.KEY_VAL 

In settings.py das sind die Sätze os env Variable zu erhalten:

import os; KEY_VAL = os.environ.get("KEY_VAL") 

ich ZSH bin mit meiner Ubuntu-System. Hier ist meine ~ /. Zshrc-Datei:

# 
# Executes commands at the start of an interactive session. 
# 
# Authors: 
# Sorin Ionescu <[email protected]> 
# 

# Source Prezto. 
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then 
    source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" 
fi 

export KEY_VAL='SOME_JUNK_VAL' 


fortune | cowsay | lolcat 

# Customize to your needs... 

Hinweis: Ich habe Variable Name und Wert geändert.

Aber wenn Sie auf jeden Fall helfen können, ich schätze es.

+1

Wie starten Sie Ihren Django-Server? – Bernhard

Antwort

2

Ihr Problem ist sicherlich nicht mit Ihrem Python-Code. Das funktioniert in vielen unserer Django-Apps einwandfrei.

Meine Vermutung ist, dass Sie den Django-Server nicht von einem Zsh überhaupt starten und somit die .zshrc nicht geladen ist. Dies ist sicherlich der Fall bei Standard-Nginx-/Gunicorn-Setups, bei denen Gunicorn als Daemon und niemals über die interaktive Befehlszeile ausgeführt wird. Möglicherweise verwenden Sie auch nicht denselben Benutzer.

Sie können dies überprüfen, indem Sie den folgenden Code irgendwo in Ihrem django app hinzufügen:

import os 
print os.environ 

BTW, können Sie auch Ihre Umgebungsvariablen durch die .zshrc denken zu injizieren. Für einfache Setups speichern wir sie normalerweise in einer .env-Datei und verwenden https://github.com/jpadilla/django-dotenv, um sie beim Start des Django zu lesen. In Bezug auf die Sicherheit ist dies dasselbe wie bei Ihrem Setup, aber es ist nicht an einen Login-Benutzer gebunden.

+0

Sie haben Recht @Nuschk. Ich habe diese App immer wieder debugged und stieß auf die laufende django durch Python manage.py runserver funktioniert einwandfrei, aber wenn Benutzer dies durch nginx versucht, dann gibt es mir Probleme. – jimish

+0

Ja, das klingt sehr nach dem, was ich erwartet habe. Wie gesagt, django-dotenv wird wahrscheinlich genau das sein, wonach Sie suchen. – Nuschk

+0

Ja, das Problem ist behoben. – jimish