You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS EC2部署Django网站时遭遇DATABASE_URL环境变量未设置错误

AWS EC2部署Django网站时DATABASE_URL环境变量未加载问题

错误提示

No DATABASE_URL environment variable set, and so no databases setup.

现有配置说明

production.py数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'lighthousemediadb',
        'USER': "postgres",
        'PASSWORD': os.environ.get('DB_PASSWORD'),  # 生产环境不硬编码密码
        'HOST': os.environ.get('DB_HOST'),
        'PORT': '5432',

        # 小幅提升性能的配置
        'client_encoding': 'UTF8',
        'default_transaction_isolation': 'read committed',
        'timezone': 'UTC'
    }
}

import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
DATABASES['default']['CONN_MAX_AGE'] = 500

gunicorn.service配置

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=ubuntu
Group=www-data
EnvironmentFile=/home/ubuntu/lighthousemedia/LightHouseMediaAgency/.env
WorkingDirectory=/home/ubuntu/lighthousemedia/LightHouseMediaAgency
ExecStart=/home/ubuntu/lighthousemedia/.venv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          BE.wsgi:application

[Install]
WantedBy=multi-user.target

.env文件内容

SECRET_KEY = 'epmxxxxxxxxxxxxu$0'
DEBUG = True
ALLOWED_HOSTS = '3.196.58.181', 'abc.com', 'localhost', '127.0.0.1'
DB_PASSWORD = 'password'
DB_HOST = 'lighthousemediadb.crte3456.ap-south-1.rds.amazonaws.com'
DATABASE_URL = postgresql://postgres:password@lighthousemediadb.crte3456.ap-south-1.rds.amazonaws.com:5432/dbname

问题原因与解决步骤

1. .env文件格式错误(核心问题)

systemd的EnvironmentFile不支持环境变量赋值时等号两边加空格,当前.env文件中所有变量的等号前后都有空格,导致systemd无法正确解析变量。

修正后的.env文件:

SECRET_KEY='epmxxxxxxxxxxxxu$0'
DEBUG=True
ALLOWED_HOSTS='3.196.58.181', 'abc.com', 'localhost', '127.0.0.1'
DB_PASSWORD='password'
DB_HOST='lighthousemediadb.crte3456.ap-south-1.rds.amazonaws.com'
DATABASE_URL=postgresql://postgres:password@lighthousemediadb.crte3456.ap-south-1.rds.amazonaws.com:5432/dbname

2. 重启gunicorn服务使配置生效

执行以下命令重载systemd配置并重启gunicorn:

sudo systemctl daemon-reload
sudo systemctl restart gunicorn.service

3. 验证环境变量是否加载成功

找到gunicorn进程ID,然后查看进程环境变量:

# 查找gunicorn进程PID
ps aux | grep gunicorn
# 替换<PID>为实际进程ID,查看DATABASE_URL是否存在
cat /proc/<PID>/environ | tr '\0' '\n' | grep DATABASE_URL

如果输出包含正确的DATABASE_URL值,说明变量加载成功。

4. 额外检查项

  • 确认.env文件权限:确保ubuntu用户拥有读取权限,执行ls -l /home/ubuntu/lighthousemedia/LightHouseMediaAgency/.env,权限应包含r(可读)。
  • 确认DATABASE_URL格式正确:确保URL中的数据库名称、密码、主机地址与AWS RDS实例信息完全匹配。

内容的提问来源于stack exchange,提问作者Rahul Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:35:05