我应该如何设置我的DATABASE_URL?

How should I set my DATABASE_URL?

我正在开发我的第一个 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 数据库之后)。

在我编码和测试时一切似乎都运行良好,但我还在 Internet 上看到了六种不同的设置数据库变量的方法。如果这不正确,我想立即修复它。真正让我困惑的是,当我将我的应用程序推送到 Heroku 时,当数据库为 /usr/local/var/postgres 时,数据将如何推送到网络?或者这根本不会发生?我现在是不是太confused/tired了?

这记录在 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 add this bits too. More details

# Enable Connection Pooling
DATABASES['default']['ENGINE'] = 'django_postgrespool'

这是一个简单的逻辑问题。在定义字典本身之前,不能设置 DATABASES 字典的 "default" 键。

无论您是否在调用中将 default 参数 设置为 dj_database_url 或作为单独的 DATABASE_URL 变量都无关紧要,尤其是因为它甚至不会在 Heroku 上使用,因为它会被环境变量覆盖。

这允许您在开发过程中使用任何数据库设置, 但在生产环境中(在 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 为您创建自己的数据库。