【问题标题】:.env not working with Django with supervisor.env 无法与主管一起使用 Django
【发布时间】:2019-10-31 03:09:06
【问题描述】:

我有一个 Django 2.2 项目,所有秘密都在 .env 文件中。

我正在使用库dotenv.env 加载到manage.py 文件中的Django 应用程序

import dotenv

def main():

    # Read from .env file
    env_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.env')
    dotenv.read_dotenv(env_file)
    ....

环境文件运行正常,本地运行时加载良好。

在服务器上,我使用 supervisor 来运行具有以下配置的应用程序。

[supervisord]
[program:myapp]
command=/var/www/html/app/start_gunicorn.sh
directory=/var/www/html/app/
autostart=true
autorestart=true
stopasgroup=true
stopsignal=QUIT
logfile=/home/ubuntu/log/supervisor/supervisor.log
logfile_maxbytes=5MB
logfile_backups=10
loglevel = info
stderr_logfile=/home/ubuntu/log/supervisor/qcg-backend.err.log
stdout_logfile_maxbytes=5MB
stdout_logfile_backups=10
stdout_logfile=/home/ubuntu/log/supervisor/qcg-backend.out.log
stderr_logfile_maxbytes=5MB
stderr_logfile_backups=10

但是环境变量没有加载并且在 Django 中不起作用。

从 SSH 控制台运行以下命令正在运行。

python manage.py shell
import os
os.environ.get('DEBUG')
> True

但运行应用,环境变量不可访问,也没有应用在应用中。

【问题讨论】:

    标签: django environment-variables supervisord


    【解决方案1】:

    manage.py 在生产环境中运行 Django 时不会被调用。从dotenv docs 开始,它说您应该将加载器代码添加到wsgi.py 的顶部。

    【讨论】:

    • 但在生产中,Django 服务器也是使用命令python manage.py runserver 启动的,该命令明确指出正在执行的文件是manage.py
    • 不,这不是运行 Django 生产服务器的正确方法。来自 Django 文档“请勿在生产环境中使用此服务器”docs.djangoproject.com/en/2.2/ref/django-admin/#runserver
    • 谢谢。我将相应地更改我的应用程序部署。但是目前,服务器是由manage.py 运行的,环境变量不应该按照它在本地工作的方式工作吗(即使在调试模式下)?
    • 为什么你认为manage.py runserver 在服务器上运行?您问题中的主管脚本正在运行/var/www/html/app/start_gunicorn.sh
    【解决方案2】:

    我认为把它放在 settings.py 上更方便。无需同时添加到 manage.py 和 wsgi.py

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2018-03-12
      • 2019-04-08
      • 1970-01-01
      • 2017-07-04
      相关资源
      最近更新 更多