我正在使用我的第一个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时,数据如何被推送到网络?或者这根本不会发生?我此时太困惑/累了吗?
答案 0 :(得分:10)
# 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为您创建自己的数据库。