2015-06-23 8 views
5

Sto provando ad accedere e recuperare (ottenere) valore della variabile di ambiente OS in settings.py e mentre eseguo il debug dell'applicazione ottengo il valore None per quello disco. Ecco ulteriori dettagli:django settings.py os.environ.get ("X") non sta recuperando i valori corretti

Esistono alcune chiavi importanti/segrete che non possono essere condivise nel codice, in modo che vengano esportate nelle variabili di ambiente del sistema operativo. Ogni volta che echo $ KEY_VAL dal terminale Linux o dalla shell python (shell manage.py) stampa il valore corretto della mia variabile di ambiente.

Ma mentre esegue il debug dell'applicazione, mostra che il valore è Nessuno. Sto usando debugger IPDB e il valore della stampa con seguente comando dà Nessuno come risultato:

p settings.KEY_VAL 

In settings.py queste sono le frasi per ottenere variabile os ENV:

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

Sto usando ZSH nel mio sistema di Ubuntu. Ecco il mio file ~/.zshrc:

# 
# 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... 

Nota: ho modificato nome e valore della variabile.

Ma se puoi aiutare comunque lo apprezzo.

+1

Come si avvia il server django? – Bernhard

risposta

2

Il tuo problema non è certamente con il tuo codice Python. Funziona perfettamente in molte delle nostre app di django.

La mia ipotesi è che non si sta avviando il server django da uno zsh e quindi il .zshrc non è caricato. Questo è certamente il caso delle configurazioni standard di nginx/gunicorn, in cui gunicorn viene eseguito come un demone e mai tramite la riga di comando interattiva. Inoltre, potrebbe essere che non stai utilizzando lo stesso utente per questo.

È possibile verificare questo aggiungendo il seguente codice da qualche parte nella tua app Django:

import os 
print os.environ 

proposito, si potrebbe anche riconsiderare la iniettando le variabili di ambiente attraverso il .zshrc. Per configurazioni semplici, di solito li teniamo in un file .env e usiamo https://github.com/jpadilla/django-dotenv per leggerli all'avvio di django. Per quanto riguarda la sicurezza, ciò equivale a quello della configurazione, ma non è associato a un utente di accesso.

+0

Hai ragione @Nuschk. Ho eseguito il debug di questa app ancora e ancora e ho scoperto che eseguendo django tramite python, manage.py runserver funziona perfettamente, ma se l'utente prova questo tramite nginx, mi sta dando problemi. – jimish

+0

Sì, sembra molto simile a quello che mi aspettavo. Come ho detto, probabilmente django-dotenv sarà esattamente quello che stai cercando. – Nuschk

+0

sì, quel problema è stato risolto. – jimish

Problemi correlati