运行 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 变量有很多选择,我喜欢这个,因为我可以在我的暂存和生产环境中设置它,并且相同的设置适用于两者。