我有两个我的Django应用程序需要访问的数据库。一个是由单独的应用程序拥有的共享数据库,Django应用程序只具有读访问权限。第二个完全由Django应用程序拥有。
对于本地开发我很好,但我不确定如何配置,以便Heroku使用第二个数据库。
目前,我将共享数据库提升为DATABASE_URL
,辅助数据库位于HEROKU_POSTGRESQL_BLUE_URL
。
在我的设置中,我有:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'main_database_name',
'USER': 'username',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}, 'secondary': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'secondary_database_name',
'USER': 'username',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}
}
如果您需要我澄清,请再问任何问题。
谢谢!
总之,我的具体问题是:我不知道如何让Heroku使用HEROKU_POSTGRESQL_BLUE_URL
作为“辅助”数据库。
---编辑----
在settings.py
的底部:
# Configure Django App for Heroku.
import django_heroku
django_heroku.settings(locals())
这是我的应用程序的默认数据库和Heroku的DATABASE_URL
之间的连接。我仍然没有解决问题,但在评论中进行了一些故障排除帮助之后,我相信答案会在那里找到。
答案 0 :(得分:0)
这是我的工作解决方案。
我有一个local_settings.py
文件未被版本控制跟踪。这包含开发人员的postgres实例的数据库设置。
<强> local_settings.py 强>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'main_database_name',
'USER': 'username',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}, 'secondary': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'secondary_database_name',
'USER': 'username',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}
}
然后在settings.py
我尝试导入local_settings.py
文件。如果它不存在,我使用django_heroku
包来配置Heroku的所有内容。在我的情况下,我需要传递关键字参数databases=False
,因为我想为数据库进行更自定义的配置。
settings.py(仅限相关部分)
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
# These database settings are used for heroku deployments. They are overwritten with local_settings.py in development.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DATABASE_URL'),
'USER': '',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}, 'secondary': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('SECONDARY_DATABASE_URL'),
'USER': '',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}
}
try:
from local_settings import *
except ImportError as e:
# Configure Django App for Heroku.
import django_heroku
django_heroku.settings(locals(), databases=False)
为了使其工作,您需要将Heroku env变量SECONDARY_DATABASE_NAME
设置为数据库的URL。
要查找辅助数据库的网址heroku config -a your_app_name
。复制url,然后运行
heroku config:set SECONDARY_DATABASE_URL=postgres://xxxxxxx -a your_app_Name
如何处理ENV变量有很多选择,我喜欢这个,因为我可以在我的登台和制作环境中设置它,并且相同的设置适用于两者。