30 votes

Injection de paramètres de base de données Heroku - Comment configurer ma base de données dev django?

J'essaie d'obtenir mon local dev django app de travail après avoir suivi ces instructions sur l'ajout d'env paramètres de base de données.

https://devcenter.heroku.com/articles/django-injection

J'ai suivi les instructions mais obtenez l'erreur suivante lors de mon application tente d'accéder à la base de données locale

Request Method: GET
Request URL:    http://localhost:8000
Django Version: 1.4
Exception Type: ImproperlyConfigured
Exception Value:    
You need to specify NAME in your Django settings file.

Mes paramètres de base de données à l'origine,

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'db',                      # Or path to database file if using sqlite3.
        'USER': 'foo',                      # Not used with sqlite3.
        'PASSWORD': 'bar',                  # Not used with sqlite3.
        'HOST': 'localhost',                
        'PORT': '5432',
    }
}

le heroku l'article dit d'ajouter ce qui suit au fichier de paramètres

import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}

comment puis-je obtenir dj_database_url.config pour utiliser mon mon dev paramètres lors de la DATABASE_URL n'est pas disponible en dev?

39voto

kyen99 Points 323

Vous pouvez simplement ajouter vos paramètres de développement aux valeurs par défaut comme ceci ...

 import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://foo:bar@localhost:5432/db')}
 

13voto

user712225 Points 129

Utilisez ceci dans votre settings.py:

 DATABASES = {'default': dj_database_url.config(default=os.environ['DATABASE_URL'])}
 

et dans votre fichier .env ont ceci:

 DATABASE_URL=postgres://localhost/yourdbname
 

lorsque vous lancez avec "foreman start", il examine le fichier .env et crée toutes ces variables d'environnement, tout comme l'exécution sur Heroku lui-même. Tapez "heroku config" pour confirmer que vous disposez d'un ensemble DATABASE_URL, ce que vous devriez faire si vous avez ajouté le module de base de données postgres.

8voto

Loïs Di Qual Points 5263

Définissez simplement une variable d'environnement sur votre système d'exploitation et vérifiez si elle est définie ou non. Par exemple, avec un système UNIX:

 # In ~/.bash_profile
export LOCAL_DEV=true

# In settings.py
import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}

if bool(os.environ.get('LOCAL_DEV', False)):
    # Override DATABASES['default'] with your local database configuration
 

De plus, si vous devez définir une variable d'environnement sur votre espace Heroku:

 heroku config:add MY_VAR='my_value'
 

5voto

ming.kernel Points 826

Je viens de l'essayer et voici mon code:

 import dj_database_url
import os

# if 'DATABASE_URL' does no exist, then it's local machine
if not os.environ.has_key('DATABASE_URL'):
    os.environ['DATABASE_URL'] = 'postgres://django_login:123456@localhost/django_db'

DATABASES = {'default': dj_database_url.config(default=os.environ['DATABASE_URL'])}
 

Le nom de ma base de données est "django_db", le nom d'utilisateur est "django_login", le mot de passe est "123456".

Mon code peut fonctionner à la fois sur la machine locale et sur Heroku.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X