运行 heroku 上的两个数据库和 django
Running two databases on heroku with django
我的 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
作为 "secondary" 数据库。
---编辑----
在settings.py
的底部:
# Configure Django App for Heroku.
import django_heroku
django_heroku.settings(locals())
这是在我的应用程序的默认数据库和 Heroku 的 DATABASE_URL
之间建立连接的地方。我仍然没有解决问题,但在评论中提供一些故障排除帮助后,我相信答案会在那里找到。
这是我的工作解决方案。
我有一个 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 环境变量 SECONDARY_DATABASE_NAME
设置为数据库的 url。
找出您的辅助数据库 运行 URL heroku config -a your_app_name
。复制 url 然后通过 运行ning
在 heroku 中设置一个新的环境参数
heroku config:set SECONDARY_DATABASE_URL=postgres://xxxxxxx -a your_app_Name
关于如何处理 ENV 变量有很多选择,我喜欢这个,因为我可以在我的暂存和生产环境中设置它,并且相同的设置适用于两者。
我的 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
作为 "secondary" 数据库。
---编辑----
在settings.py
的底部:
# Configure Django App for Heroku.
import django_heroku
django_heroku.settings(locals())
这是在我的应用程序的默认数据库和 Heroku 的 DATABASE_URL
之间建立连接的地方。我仍然没有解决问题,但在评论中提供一些故障排除帮助后,我相信答案会在那里找到。
这是我的工作解决方案。
我有一个 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 环境变量 SECONDARY_DATABASE_NAME
设置为数据库的 url。
找出您的辅助数据库 运行 URL heroku config -a your_app_name
。复制 url 然后通过 运行ning
heroku config:set SECONDARY_DATABASE_URL=postgres://xxxxxxx -a your_app_Name
关于如何处理 ENV 变量有很多选择,我喜欢这个,因为我可以在我的暂存和生产环境中设置它,并且相同的设置适用于两者。