连接Django到Heroku Postgres数据库
问题描述:
我已经添加了一个Postgres数据库到我的Heroku应用程序,并且试图将我的Django应用程序连接到它。但是,我的应用程序始终连接到本地Postgres数据库。连接Django到Heroku 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数据库而不是本地数据库?
答
您可以设置您的设置,以便在开发过程中从本地数据库读取数据,并在生产中使用您的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)。我希望这是可以理解的。
你能否确认你的代码实际上看到了'DATABASE_URL'环境变量,如'import os; print os.environ ['DATABASE_URL']'?只需在'db_from_env'变量之前放置它,重新启动服务器并检查输出。 – VeGABAU
它抛出一个KeyError;似乎并没有真正看到它。我以为dj_database_url.config()应该读取.env文件并在那里获取DATABASE_URL值? 如果我导出'DATABASE_URL'= postgres:blahblah,它似乎工作,但我无法弄清楚为什么它不会与只在.env – HLH
如果你真的想存储你的env变量.env文件,可能考虑使用'https:// github.com/theskumar/python-dotenv'。 – VeGABAU