我已经在我的Heroku应用程序中添加了一个Postgres数据库,并且我正在尝试将我的Django应用程序连接到它。但是,我的应用程序总是连接到本地Postgres数据库。
settings.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)
我在.env文件中将'DATABASE_URL'设置为我的Heroku应用程序上的Postgres数据库的URL,但它似乎没有更新数据库。如何强制我的应用程序连接到Heroku数据库而不是本地数据库?
答案 0 :(得分:3)
您可以将设置设置为在开发时从本地数据库中读取,并在生产中使用Heroku数据库。首先,您可能已经知道,您需要dj_database_url
。
您可以创建一个名为local_settings.py
的单独设置文件,其中包含您的普通数据库配置(例如默认的Django数据库配置)。在您的settings.py
:
DATABASES = {
'default': dj_database_url.config()
}
位于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
所以你的local_settings.py
应该在你的开发服务器中,而不是在Heroku应用程序中(你可以忽略它将它添加到.gitignore)。我希望这是可以理解的。
答案 1 :(得分:0)
从本地Django代码连接到Live heroku DB,而无需手动设置DATABASE_URL env变量:
在您的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