web-dev-qa-db-fra.com

Heroku Database Settings Injection - Comment configurer ma base de données dev Django?

J'essaie de faire fonctionner mon application de développement locale Django après avoir suivi les instructions d'ajout de paramètres de base de données env.

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

J'ai suivi les instructions, mais le message d'erreur suivant s'affiche 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 d'ajouter ce qui suit au fichier de paramètres

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

comment faire en sorte que dj_database_url.config utilise mes paramètres de développement lorsque DATABASE_URL n'est pas disponible dans dev?

30
heifetz

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')}
39
kyen99

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, comme si elles étaient exécutées sur Heroku. Tapez "heroku config" pour confirmer que vous avez un ensemble DATABASE_URL, que vous devriez utiliser si vous avez ajouté le complément de base de données postgres.

13
user712225

Il suffit de définir une variable d’environnement sur votre système d’exploitation et de vérifier 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 avez besoin de définir une variable d’environnement sur votre espace heroku:

heroku config:add MY_VAR='my_value'
8
Loïs Di Qual

Je viens d'essayer ceci et voici mon code:

import dj_database_url

local_db = 'postgres://Django_login:123456@localhost/Django_db'
DATABASES = {'default': dj_database_url.config(default=local_db)}

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 être exécuté à la fois sur la machine locale et sur heroku.

5
ming.kernel

importer dj_database_url

BASES DE DONNEES = {'default': Dj_database_url.config (default = 'postgres: // yourusername : yourpassword @ yourhosturl : 5432 / yourdbname ') }

** Remplacez la chaîne en gras par vos paramètres de base de données Si vous utilisez une base de données locale, remplacez yourhosturl par localhost

1
Naveen Agarwal