我正在使用环境键进行更好的设置配置。最初,我遇到以下错误
django.core.exceptions.ImproperlyConfigured: Set the DATABASE_URL environment variable
因此,我在google中搜索并找到了以下解决方案
settings / base.py
import os
with open('.envs/.local/.postgres') as fh:
os.environ.update(line.strip().split('=', 1) for line in fh)
但是,这也给我一个错误。我得到
ValueError: not enough values to unpack (expected 2, got 1)
.postgres和.django如下所示
.django
# General
# ------------------------------------------------------------------------------
export USE_DOCKER=yes
# Email
# DJANGO_EMAIL_BACKEND
# Redis
# ------------------------------------------------------------------------------
export REDIS_URL=redis://redis:6379/0
# Celery
# ------------------------------------------------------------------------------
# CELERY_BROKER_URL=
# CELERY_RESULT_BACKEND = 'django-cache'
# Flower
export CELERY_FLOWER_USER=debug
export CELERY_FLOWER_PASSWORD=debug
.postgres
# PostgreSQL
# ------------------------------------------------------------------------------
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=database
POSTGRES_USER=username
POSTGRES_PASSWORD=password
DATABASE_URL=postgres://username:password@localhost:5432/app
答案 0 :(得分:1)
显然不是.envs/.local/.postgres
中的每一行都有一个=
字符,因此split('=', 1)
只会在它为该行输出的元组中导致一项,而dict.update
期望有两项迭代器输出中每个元组的项目。
您应确保生成器表达式中的行中有一个=
字符:
os.environ.update(line.strip().split('=', 1) for line in fh if '=' in line)
编辑:现在,您已经用一个附加的.django
文件更新了问题,该文件在环境变量设置之前有一个额外的关键字export
,现在应该查找此关键字并将其删除如果存在:
os.environ.update((line.split(maxsplit=1)[1] if line.startswith('export ') else line).strip().split('=', 1) for line in fh if '=' in line)