Django

主管、gunicorn 和 Django 的奇怪行為

  • October 25, 2014

我對主管和 gunicorn 有一個非常奇怪的問題。我閱讀了主管文件、所有相關的部落格文章、stackexchange 問題,但沒有一個能解決我的奇怪問題,我什至不知道該去哪裡進一步尋找。

我的主管配置:

[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/Python. regularuser可以從該文件夾中讀取包。

如果我用 upstart 執行這個過程,用節傳遞相同的環境變數,env甚至從文件中讀取它們,一切都很好,圖像被解密,但不是用主管。

我嘗試了帶單引號、不帶引號、傳遞PYTHONPATH給 gunicorn--pythonpath或環境選項的環境變數,但仍然沒有運氣。我能做些什麼?GPG_PASSHPRASE 包含逗號會是一個問題嗎?(我無法改變。)還有什麼?我真的沒有想法了。

我可能幫不上忙,但我會排除一些可能性(這可能是完全錯誤的)

  • 最後一行命令(“ djangoapp...”)之前沒有空格。可能您的建構鏈中的某些步驟將其與前一個--pythonpath標誌連接起來,並且兩者都被忽略了。
  • 密碼中的逗號(可疑)——您是否嘗試過僅更改密碼?還是轉義逗號?

引用自:https://serverfault.com/questions/638526