2016-05-30 1 views
1

J'ai posté une question un peu similaire à celle-ci plus tôt mais je n'ai pas trouvé les réponses que je cherchais, donc après quelques recherches je l'ai raffiné quelque peu.L'application Django ne trouve pas les variables d'environnement

J'ai écrit une application Django à déployer avec AWS Elastic Beanstalk qui utilise une base de données RDS. Mon environnement Elastic Beanstalk a plusieurs variables d'environnement utilisées pour accéder à la base de données, qui sont accessibles dans mon fichier settings.py comme suit:

'NAME': os.environ['RDS_DB_NAME'], 

Cela fonctionne bien avec la version déployée de l'application, mais il est encore en cours de développement Il serait donc très utile d'accéder à ces variables dans mon environnement Linux local. J'ai écrit un script bash qui exporte les variables et je peux tester que cela fonctionne en utilisant "echo $", qui retourne la bonne valeur. Cependant, lorsque j'essaie de lancer l'application localement, j'obtiens une erreur KeyError (plus précisément "KeyError: 'RDS_DB_NAME'"), il semble donc que l'application Django ne puisse pas détecter les variables d'environnement que j'ai déclarées précédemment.

Je suis un peu perplexe - des idées ou d'autres questions sont les bienvenues!

Répondre

0

Sur ubuntu, accédez à votre répertoire personnel et ouvrez le fichier .bashrc.

ajoutez la ligne suivante à la fin de ce fichier ajouter ceci:

export RDS_DB_NAME='<your_local_db_name>' 

borne fermer et réouvrir. Lancez le serveur django et terminé.

EDIT:

essayer

'NAME': os.environ.get('RDS_DB_NAME', ''),

au lieu de

'NAME': os.environ['RDS_DB_NAME'], 
+0

Merci pour votre réponse, mais malheureusement, cela ne semble pas aider. Je reçois toujours la même erreur de clé. –

+0

avez-vous fermé tous vos onglets terminaux ouverts et réexécuté le serveur dans le nouveau terminal? –

+0

Oui, malheureusement pas de changement. –

0

Une autre façon, vous pouvez gérer cette situation est en définissant une condition quand utiliser les variables d'environnement et quand utiliser les variables locales (codées en dur).

L'extrait de code suivant est tiré de RealPython article sur la façon de déployer une application Django sur AWS:

if 'RDS_DB_NAME' in os.environ: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
      'NAME': os.environ['RDS_DB_NAME'], 
      'USER': os.environ['RDS_USERNAME'], 
      'PASSWORD': os.environ['RDS_PASSWORD'], 
      'HOST': os.environ['RDS_HOSTNAME'], 
      'PORT': os.environ['RDS_PORT'], 
     } 
    } 
else: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
      'NAME': 'name', 
      'USER': 'user', 
      'PASSWORD': 'pass', 
      'HOST': 'localhost', 
      'PORT': '5432', 
     } 
    } 
+0

Ceci est très utile, merci! Je préférerais toutefois utiliser des variables d'environnement si possible car je prévois de finalement déployer le projet fini sur Github, et je préférerais ne pas publier l'accès à ma base de données! –

2

Je suggère d'utiliser django-environ

Avec elle, vous pouvez simplement créer .env variable fichier avoir besoin. En outre, il permettra (mais ne pas forcer à) vous définir la configuration entière db (et d'autres aussi comme le cache, etc.) comme URL comme ceci:

DATABASE_URL=psql://urser:[email protected]:8458/database