我该如何设置DATABASE_URL?

时间:2015-05-05 05:28:09

标签: python django postgresql heroku

我正在使用我的第一个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时,数据如何被推送到网络?或者这根本不会发生?我此时太困惑/累了吗?

3 个答案:

答案 0 :(得分:10)

这在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'

答案 1 :(得分:3)

这是一个简单的逻辑问题。您无法设置"默认"在定义字典本身之前,DATABASES字典的键。

您是否在调用中将default 参数设置为dj_database_url或作为单独的DATABASE_URL变量无关紧要,尤其是因为赢了&#39 ;甚至可以在Heroku上使用,因为它将被环境变量覆盖。

答案 2 :(得分:0)

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