Agregué una base de datos Postgres a mi aplicación Heroku y estoy tratando de conectar mi aplicación Django a ella. Sin embargo, mi aplicación siempre se conecta a la base de datos local de Postgres.
configuración.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'app_db', 'USER': 'admin', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': '', } } db_from_env = dj_database_url.config(conn_max_age=500) DATABASES['default'].update(db_from_env)
Configuré 'DATABASE_URL' en el archivo .env para que sea la URL de la base de datos de Postgres en mi aplicación Heroku, pero no parece actualizar la base de datos. ¿Cómo obligo a mi aplicación a conectarse a la base de datos de Heroku en lugar de a la local?
Puede configurar su configuración para leer desde su base de datos local cuando esté en desarrollo y usar su base de datos Heroku en producción. En primer lugar, como ya sabrá, necesita dj_database_url
.
Puede crear un archivo de configuración separado llamado local_settings.py
y allí incluir su configuración de db normal (por ejemplo, la configuración de db de Django predeterminada). Y en su settings.py
:
DATABASES = { 'default': dj_database_url.config() }
Y en la parte inferior de su settings.py
:
# Tries to import local settings, if on dev, # import everything in local_Settings, which overrides the dj_database_url # If on deploy, local_settings won't be found so just ignore the ImportError try: from .local_settings import * except ImportError: pass
Por lo tanto, su local_settings.py
debería estar en su servidor de desarrollo, no en la aplicación Heroku (puede ignorarlo y agregarlo a .gitignore). Espero que esto sea entendible.
Conéctese a Live heroku DB desde el código Django local sin tener que configurar manualmente la variable de entorno DATABASE_URL:
Ponga el siguiente código en su archivo settings.py
import os, subprocess, dj_database_url bashCommand = “heroku config:get DATABASE_URL -a app_name” #Use your app_name output = subprocess.check_output(['bash','-c', bashCommand]).decode(“utf-8”) # executing the bash command and converting byte to string DATABASES['default'] = dj_database_url.config(default=output,conn_max_age=600, ssl_require=True) #making connection to heroku DB without having to set DATABASE_URL env variable