.env无法与主管一起使用Django

时间:2019-06-17 13:50:30

标签: django environment-variables supervisor

我有一个 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

但是运行该应用程序后,将无法访问环境变量,并且无法在应用程序中应用环境变量。

2 个答案:

答案 0 :(得分:2)

在生产环境中运行Django时不会调用

manage.py。它在dotenv docs中说,您也应该将加载程序代码也添加到wsgi.py的顶部。

答案 1 :(得分:0)

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