2012-06-17 3 views
30

J'essaie de faire fonctionner mon application dev django locale après avoir suivi ces instructions sur l'ajout de paramètres de base de données env.Paramètres de base de données Heroku Injection - Comment configurer ma base de données dev django?

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

J'ai suivi les instructions, mais l'erreur suivante lorsque 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', 
    } 
} 

l'article heroku dit 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 mes paramètres de développement lorsque le DATABASE_URL n'est pas disponible en dev?

Répondre

38

Vous pouvez simplement ajouter vos paramètres de dev aux valeurs par défaut comme celui-ci ...

import dj_database_url 
DATABASES = {'default': dj_database_url.config(default='postgres://foo:[email protected]:5432/db')} 
+1

Comment cela définit-il le moteur, ce qui semble être nécessaire au moins pour l'environnement local? – GreenAsJade

+0

Si vous jetez un oeil à la méthode 'dj_database_url.config' vous verrez que la valeur du moteur est dérivé du schéma de l'URL de base de données par exemple' postgres: // ' – donturner

+0

Il est préférable si vous définissez la DATABASE_URL dans une variable d'environnement , que config() va lire. – Bill

8

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 

En outre, si vous avez besoin set an environment variable sur votre espace Heroku:

heroku config:add MY_VAR='my_value' 
+2

en fait, la syntaxe correcte est 'config Heroku: ajouter MY_VAR = 'my_value'' –

+0

Tu as raison :) merci, je l'a corrigé. –

+0

heroku config: set MY_VAR = 'value' est correct aussi. add est un alias :) – babttz

13

Utilisez 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 « démarrage contremaître », il se penchera sur le fichier .env et créer toutes les variables d'environnement, tout comme la course sur Heroku lui-même. Tapez "heroku config" pour confirmer que vous avez un ensemble DATABASE_URL, ce que vous devriez faire si vous avez ajouté l'addon de base de données postgres.

+2

Il est redondant d'attribuer « par défaut » à DATABASE_URL, qui est la variable d'environnement qui lit config() ... par défaut. – Bill

5

Je viens essayé et voici mon code:

import dj_database_url 

local_db = 'postgres://django_login:[email protected]/django_db' 
DATABASES = {'default': dj_database_url.config(default=local_db)} 

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

Mon code peut s'exécuter à la fois sur une machine locale et sur un heroku.

1

importation dj_database_url

BASES = { 'default': dj_database_url.config (par défaut = 'postgres: // yourusername: votremotdepasse @yourhosturl: 5432/yourdbname')}

** Remplacer la chaîne gras avec vos paramètres de base de données si vous utilisez locale base de données puis remplacez yourhosturl par localhost

Questions connexes