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)
几个星期后,我可以找到我的问题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.py
和wsgi_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)
归档时间: |
|
查看次数: |
15213 次 |
最近记录: |