使用django

时间:2018-01-11 19:54:43

标签: python django postgresql heroku multiple-databases

我有两个我的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之间的连接。我仍然没有解决问题,但在评论中进行了一些故障排除帮助之后,我相信答案会在那里找到。

1 个答案:

答案 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中设置一个新的环境参数

heroku config:set SECONDARY_DATABASE_URL=postgres://xxxxxxx -a your_app_Name

如何处理ENV变量有很多选择,我喜欢这个,因为我可以在我的登台和制作环境中设置它,并且相同的设置适用于两者。