如何解决Django + uWSGI + nginx堆栈中"没有发现python应用程序检查启动日志"的错误

Den*_*nko 5 django nginx web-deployment uwsgi ansible

我在ubuntu 16.04上使用uWSGI和nginx使用Django 1.10并使用ansible部署我的应用程序.我的项目没有默认结构,但很常见(感谢两个scoopce :).我使用split dev和production settings和config文件夹代替'name'项目文件夹.它看起来像这样:

|-- config
|   |-- __init__.py
|   |-- settings
|   |   |-- __init__.py
|   |   |-- base.py
|   |   `-- dev.py
|   |-- urls.py
|   |-- wsgi_dev.py
|   `-- wsgi_production.py
|-- manage.py
`-- requirements.txt
Run Code Online (Sandbox Code Playgroud)

production.py从安全加密的ansible和在配置/设置中找到我的genarate.

使用此配置,我得到"没有找到python应用程序检查您的启动日志".Uwsgi看不到我的申请.

({{}}它是ansible的jinja2语法)

/etc/uwsgi/sites/{{ project_name }}

[uwsgi]
chdir = {{ django_root }}
home = /home/{{ project_user }}/venvs/{{ project_name }}
module = config.wsgi_production:application

master = true
processes = 5

socket = /run/uwsgi/{{ project_name }}.sock
chown-socket = {{ project_user }}:www-data
chmod-socket = 660
vacuum = true
Run Code Online (Sandbox Code Playgroud)

Den*_*nko 6

几个星期后,我可以找到我的问题wsgi.py.它常见的解决方案使用os.environ['ENV']DJANGO_SETTINGS_MODULE,但deffrent用户和权限及其工作这么想的.

如果你在你的wsgi.py文件中使用这样的东西:

os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings." + os.environ["ENV"]

并且有问题no python application found- 拆分你的wsgi文件.我可以捕获os.environ["ENV"]返回空字符串.我为我的所有用户添加它,使用source等.但是在emperior模式下的uwsgi看不到它.您使用前人的精力wsgi_dev.pywsgi_production.py在那里你可以写somethink这样os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production".它不是那么优雅,但解决这个问题很好.

对于使用拆分wsgi你可以写这样的东西 wsgi.py

import os

from django.core.wsgi import get_wsgi_application

if os.environ.get('DEV') is True:
   os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
else:
   os.environ.setdefault("DJANGO_SETTINGS_MODULE", 
   "config.settings.production")

application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)