主管、gunicorn 和 Django 的奇怪行为

主管、gunicorn 和 Django 的奇怪行为

我在使用 Supervisor 和 gunicorn 时遇到了一个非常奇怪的问题。我阅读了 Supervisor文档,所有相关博客文章,stackchange 问题但它们都没有解决我的奇怪问题,我甚至不知道该去哪里寻找。

我的主管配置:

[program:djangoapp]
user = regularuser
directory = /path/to/djangoapp
command =
        /path/to/djangoapp/.venv/bin/gunicorn
        --debug
        --log-file -
        --log-level debug
        --name arlista
        --workers 9
        --pythonpath /path/to/necessary/library/source/Python
        djangoapp.wsgi:application
stdout_logfile = /path/to/logfolder/djangoapp.log
autorestart = true
redirect_stderr = true
environment =
        GPG_PASSPHRASE="a_passhprase_with_a_comma_in_it",
        DJANGO_SETTINGS_MODULE="myapp.settings.production",
        DJANGO_SECRET_KEY="secret_key_working_fine",
        DJANGO_DB_ENGINE="django.db.backends.mysql",
        DJANGO_DB_HOST="localhost",
        DJANGO_DB_NAME="dbname",
        DJANGO_DB_USER="dbuser",
        DJANGO_DB_PASSWORD="dbpassword",
        DJANGO_MEDIA_ROOT="/path/to/djangoapp/media",
        DJANGO_STATIC_ROOT="/path/to/djangoapp/static_root",
        # a couple more environment variables here for Django

一切似乎都运行良好。它可以连接到数据库,我可以看到djangoapp.logmyapp.settings.production文件的 pyc 已生成,因此设置已加载。DJANGO_MEDIA_ROOT运行良好,因为图像是从该文件夹提供的(如果我删除该设置,Django 甚至不会启动)。

然而有些页面,加密图像在运行时被解密(这就是 GPG_PASSHPRASE 是必要的原因),这些页面给我空白图像(长度为零的图像,因此 Django 可以工作,但解密不行)。解密由 完成/usr/bin/gpg。处理解密的函数位于 中的包中/path/to/necessary/library/source/Pythonregularuser可以从该文件夹读取包。

如果我使用 upstart 运行该过程,使用 stanza 传递相同的环境变量,env甚至从文件中读取它们,一切都很好,图像已被解密,但使用 Supervisor 则不行。

我尝试过使用单引号、不使用引号、传递PYTHONPATH给 gunicorn--pythonpath或环境选项的环境变量,但仍然没有成功。我该怎么办?GPG_PASSHPRASE 包含逗号会是个问题吗?(我无法改变这一点。)还有什么?我真的没有主意了。

答案1

我可能帮不上忙,但我会提出一些可能性(可能完全错误)

  • 命令的最后一行(“ djangoapp...”)之前没有空格。可能构建链中的某个步骤将此与前一个--pythonpath标志连接起来,并且两者都被忽略。
  • 密码中有逗号(值得怀疑)——您是否尝试过更改密码?或者转义逗号?

相关内容