【发布时间】:2018-12-28 03:37:36
【问题描述】:
我今天致力于将我的应用从本地环境迁移到 Heroku。这既令人沮丧又有趣,但现在我很困。
我有一个名为DCPViews 的架构,我希望数据库连接在运行查询时默认使用。我已经阅读了所有相关的教程/帖子/提示,这就是我所在的位置:
数据库层次结构
postgres (default system database)
-> DCP (app database)
-> DCP (base tables schema)
-> DCPViews (views layer schema)
settings.py
import django_heroku
import dj_database_url
...
DATABASES = {}
# DATABASE_URL = 'postgres://<user>:<pass>@<host>:<port>/<db_name>?currentSchema=<schema>'
DATABASE_URL = 'postgres://' + \
config('DB_USER') + ':' + \
config('DB_PASSWORD') + '@' + \
config('DB_HOST') + ':' + \
config('DB_PORT') + '/' + \
config('DB_NAME') + \
'?currentSchema=' + config('DB_SCHEMA_NAME')
DATABASES['default'] = dj_database_url.config(default=DATABASE_URL, ssl_require=True)
...
# Configure Django App for Heroku
django_heroku.settings(locals())
问题
我已经尽一切努力让 Heroku 使用正确的 DATABASE_URL(currentSchema = DCPViews),但没有运气。我没有创建新角色的数据库权限,也没有为 Heroku 的默认数据库用户设置搜索路径。它也不会让我手动导出DATABASE_URL,并且似乎不接受我在settings.py 文件中传递的值。 heroku config -s 命令总是返回相同的 DATABASE_URL 值。
在我的本地环境中一切正常,但这是一个主要障碍。如何让 Heroku 在运行查询时使用正确的 search_path 或默认使用 DCPViews 架构?
更新
我要发送数据库凭据和 currentSchema 我想在我的 settings.py 文件中使用,但 Heroku 似乎忽略它们并在创建 DATABASES['default'] 密钥时覆盖它们。这是我在浏览器中加载页面时的 Django 调试:
DATABASES
{'default': {'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_MAX_AGE': 600,
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': '<host_name>',
'NAME': '<db_name>',
'OPTIONS': {'sslmode': 'require'},
'PASSWORD': '********************',
'PORT': 5432,
'TEST': {'CHARSET': None,
'COLLATION': None,
'MIRROR': None,
'NAME': None},
'TIME_ZONE': None,
'USER': '<user_name>'}}
DATABASE_URL
'postgres://<user>:<pass>@<host>:<port>/<db_name>?currentSchema=<schema>'
【问题讨论】:
标签: django postgresql heroku schema