我应该如何设置我的 DATABASE_URL?
Posted
技术标签:
【中文标题】我应该如何设置我的 DATABASE_URL?【英文标题】:How should I set my DATABASE_URL? 【发布时间】:2015-07-14 17:03:38 【问题描述】:我正在开发我的第一个 Heroku/Django 应用程序。我只是想确保我正确设置了DATABASE_URL
和DATABASES
变量。这是我的代码中的内容:
import dj_database_url
DATABASE_URL = 'postgresql:///my_app'
# Parse database configuration from $DATABASE_URL
DATABASES =
'default': dj_database_url.config(default=DATABASE_URL)
当我只有DATABASES['default'] = dj_database_url.config()
并尝试使用run server
或migrate
之类的Django 命令时,我收到以下错误:NameError: name 'DATABASES' is not defined
。我设置了DATABASE_URL
,因为这样做似乎可以解决这个问题(在我创建my_app
数据库之后)。
在我编写代码和测试时,一切似乎都运行良好,但我还在互联网上看到了六种不同的设置数据库变量的方法。如果这不正确,我想现在修复它。真正让我困惑的是,当我将我的应用程序推送到 Heroku 时,当数据库是 /usr/local/var/postgres 时,数据将如何被推送到网络上?或者这根本不会发生?在这一点上我是不是太困惑/太累了?
【问题讨论】:
DATABASES['default'] = dj_database_url.config()
返回 NameError 因为那里不存在 DATABASES 字典。 DATABASES =
DATABASES['default'] = dj_database_url.config()
应该可以工作
我已经在 localhost 中进行调谐时连接了一个 Postgresql 数据库,但是当我托管在 Heroku 上时,它创建了自己的数据库,我需要更改它并链接我已经存在的数据库。怎么做,有人可以帮我吗?谢谢。
【参考方案1】:
这记录在Heroku Devecenter
# Parse database configuration from $DATABASE_URL
import dj_database_url
# DATABASES['default'] = dj_database_url.config()
#updated
DATABASES = 'default': dj_database_url.config(default='postgres://user:pass@localhost/dbname')
如果您需要Database connection pooling,也添加此位。 More details
# Enable Connection Pooling
DATABASES['default']['ENGINE'] = 'django_postgrespool'
【讨论】:
所以当我只有DATABASES['default'] = dj_database_url.config()
并尝试使用runserver
或migrate
之类的Django 命令时,我收到以下错误:NameError: name 'DATABASES' is not defined
。我设置了 DATABASE_URL,因为这样做似乎可以解决这个问题。【参考方案2】:
这是一个简单的逻辑问题。在定义字典本身之前,您不能设置 DATABASES 字典的“默认”键。
您是否在调用中将default
参数 设置为dj_database_url
或作为单独的DATABASE_URL
变量是无关紧要的,尤其是因为它甚至不会在Heroku 上用作它将被环境变量覆盖。
【讨论】:
对。我忘了我删除了 DATABASES 的原始声明。感谢您指出这一点。 @daniel,如何使用 dj_database_url 指定测试数据库?【参考方案3】:这允许您在开发过程中使用任何数据库设置,
但在生产中(在 Heroku 上),DATABASES['default'].update(db_from_env)
将数据库设置更改为由 Heroku 创建的设置。
import dj_database_url
DATABASES =
'"default":
"ENGINE": "django.db.backends.sqlite3",
"NAME": os.path.join(BASE_DIR, "db.sqlite3"),
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
您可以使用任何数据库设置,但最后两行允许 heroku 为您创建自己的数据库。
【讨论】:
以上是关于我应该如何设置我的 DATABASE_URL?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Heroku 应用程序的 DATABASE_URL
如何在 Scala 中使用 Heroku DATABASE_URL 环境变量?