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

时间:2017-02-12 08:27:13

标签: django nginx ansible web-deployment uwsgi

我在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

我的production.py通过安全加密的ansible生成并在config / settings中找到。

使用此配置我得到"没有找到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

1 个答案:

答案 0 :(得分:5)

几周后,我可以在wsgi.py找到问题。常见的解决方案是使用os.environ['ENV']DJANGO_SETTINGS_MODULE,但是根据用户和权限的不同,它可以正常工作。

如果您在wsgi.py文件中使用了以下内容:

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

问题no python application found - 拆分你的wsgi文件。我可以捕获os.environ["ENV"]返回空字符串。我为我的所有用户添加它,使用源等等。但是在帝国模式下的uwsgi不会看到它。 你可以使用wsgi_dev.pywsgi_production.py来编写像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()