我正在尝试通过查看两勺 django 来创建我自己的项目结构。项目结构看起来像这样
.环境
.本地
.django
.postgres
.生产
.django
.postgres
在本地的postgres中,列出了以下项目
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=marketing
POSTGRES_USER=username
POSTGRES_PASSWORD=password
DATABASE_URL=postgres://username:password@localhost:5432/marketing
设置文件分为 3 部分,即
base.py, local.py and production.py
在base.py中,我已配置
DATABASES
键如下
DATABASES = {
'default': env.db('DATABASE_URL'),
}
但是我收到错误
django.core.exceptions.ImproperlyConfigured:设置 DATABASE_URL 环境变量
尽管我在 .envs/.local/.postgres 中有
DATABASE_URL
,但我遇到了上述错误。为什么会这样?
在
.myfilename
中的变量之前添加导出。
export POSTGRES_HOST=postgres
export POSTGRES_PORT=5432
export POSTGRES_DB=marketing
export POSTGRES_USER=username
export POSTGRES_PASSWORD=password
export DATABASE_URL=postgres://username:password@localhost:5432/marketing
那就做吧
source .myfilename
我最近遇到了同样的问题。文件 .local/.postgres 中的
DATABSE_URL
环境变量需要是:
DATABASE_URL=postgres://username:password@{DB_SERVICE_NAME}:5432/marketing
正如您在此处看到的,如果您的 docker-compose.yml 的服务名称为 postgres,请使用“postgres”代替 localhost。
对于基于Python的解决方案,请检查此链接(归功于用户@falsetru)。
基本上,添加
import os
with open('.envs/.local/.postgres') as fh:
os.environ.update(line.strip().split('=', 1) for line in fh)
在您最初的 python 脚本之一中,例如
local.py
。
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=database
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
并且它们使用 DATABASE_URL 上的变量,因此如果您更改任何 POSTGRES_* 将影响 DATABASE_URL
DATABASE_URL=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB