【问题标题】:Environment variable not accessible in wsgi.py在 wsgi.py 中无法访问环境变量
【发布时间】:2021-05-05 09:36:30
【问题描述】:

我想为我的 Django 项目的生产和开发环境提供不同的 settings.py 文件。为此,我在生产环境中永久添加了一个环境变量(DJANGO_ENV),基于该变量加载不同的 settings.py。但由于某种原因,wsgi.py[下面的代码] 没有访问环境变量,因此if 条件失败。

import os

from django.core.wsgi import get_wsgi_application

if os.environ.get("DJANGO_ENV") == "PROD":
#*this condition is failing for some reason
    os.environ['DJANGO_SETTINGS_MODULE']= 'myproject.settings_prod'
else:
    os.environ['DJANGO_SETTINGS_MODULE']= 'myproject.settings'

application = get_wsgi_application()

如果我在终端上执行echo $DJANGO_ENV,我会得到“PROD”作为响应,因此变量设置正确。

同样在 python shell 中,我可以访问DJANGO_ENV 变量。

>>> import os
>>> os.environ.get("DJANGO_ENV")
'PROD'

我做错了什么?

【问题讨论】:

  • 为什么不添加变量DJANGO_SETTINGS_MODULE
  • @KlausD.感谢您的回复。你的意思是我可以在生产环境中将DJANGO_SETTINGS_MODULE设置为myproject.settings_prod?并删除 if 条件?以下是否可以在本地环境中工作os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') ?
  • @KlausD。那也行不通。基本问题是wsgi.py没有访问环境变量。我需要重启我的机器吗?

标签: python django ubuntu wsgi


【解决方案1】:

我必须通过在 .env 文件中设置它们来链接 gunicorn.service 中的环境变量,如下所示。

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

在我的 .env 中,我设置了变量。

DJANGO_ENV="PROD"

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多