2012-06-17 26 views
30

Estoy tratando de hacer funcionar mi aplicación django local después de seguir estas instrucciones sobre cómo agregar la configuración de la base de datos env.Inyección de configuración de base de datos Heroku: ¿cómo configuro mi base de datos dev django?

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

he seguido las instrucciones, pero sale el siguiente error cuando mi aplicación intenta acceder a la base de datos local

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. 

Mi configuración de base de datos de origen,

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', 
    } 
} 

el artículo heroku dice para agregar lo siguiente al archivo de configuración

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

¿cómo obtengo dj_database_url.config para utilizar mi configuración my dev cuando DATABASE_URL no está disponible en dev?

Respuesta

38

Usted puede añadir su configuración dev a los valores por defecto como este ...

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

¿Cómo configura esto el motor, que parece ser necesario al menos para el entorno local? – GreenAsJade

+0

Si observa el método 'dj_database_url.config' verá que el valor ENGINE se deriva del esquema de la URL de la base de datos, es decir,' postgres: // ' – donturner

+0

Es mejor si define DATABASE_URL en una variable de entorno , que config() leerá. – Bill

8

Simplemente configure una variable de entorno en su sistema operativo y compruebe si está configurado o no. Por ejemplo, con un sistema 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 

Además, si necesita set an environment variable en tu espacio heroku:

heroku config:add MY_VAR='my_value' 
+2

en realidad, la sintaxis correcta es 'config heroku: añadir my_var = 'my_value'' –

+0

tienes razón :) gracias, lo corrigió. –

+0

heroku config: establecer MY_VAR = 'valor' también está bien. add es un alias :) – babttz

13

utilizar esto en su settings.py:

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

y en su archivo .env tienen esto:

DATABASE_URL=postgres://localhost/yourdbname 

cuando se inicia con "inicio capataz" que se verá en el archivo .env y crear todas esas variables de entorno, al igual que se ejecuta en sí Heroku. Escriba "heroku config" para confirmar que tiene un conjunto DATABASE_URL, que debe si agregó el complemento de base de datos postgres.

+2

Es redundante asignar 'default' a DATABASE_URL, que es la variable de entorno que config() lee ... de forma predeterminada. – Bill

5

Acabo de intentar esto y aquí es mi código:

import dj_database_url 

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

Mi nombre base de datos es "django_db", nombre de usuario es "django_login", la contraseña es "123456".

Mi código puede ejecutarse tanto en la máquina local como en heroku.

1

dj_database_url importación

BASES DE DATOS = { 'default': dj_database_url.config (por defecto = 'postgres: // yourusername: sucontraseña @yourhosturl: 5432/yourdbname')}

** cadena de reemplazo en negrilla con la configuración de base de datos si está utilizando locales la base de datos vuelva a colocar yourhosturl por localhost

Cuestiones relacionadas