我应该如何设置我的 DATABASE_URL?

Posted

技术标签:

【中文标题】我应该如何设置我的 DATABASE_URL?【英文标题】:How should I set my DATABASE_URL? 【发布时间】:2015-07-14 17:03:38 【问题描述】:

我正在开发我的第一个 Heroku/Django 应用程序。我只是想确保我正确设置了DATABASE_URLDATABASES 变量。这是我的代码中的内容:

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 servermigrate 之类的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() 并尝试使用runservermigrate 之类的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?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用环境变量配置Hibernate

如何更改 Heroku 应用程序的 DATABASE_URL

如何在 Scala 中使用 Heroku DATABASE_URL 环境变量?

如何将容器中的 symfony 5 DATABASE_URL(在 .env 中)连接到本地主机上的 wamp

如何从本地机器连接到heroku pg?

如何使用环境变量配置 Hibernate