我在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
答案 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.py
和wsgi_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()