我的项目结构:
/srv/venv
是virtualenv的所在地(包含bin
或lib
之类的目录)
/srv/venv/webapp
是Django应用程序的主目录,其中包含文件wsgi.py
我的.ini
文件:
[uwsgi]
plugins = python
chdir = /srv/venv/webapp
module = wsgi
home = /srv/venv/
master = true
processes = 10
socket = /tmp/srv.sock
chmod-socket = 666
vacuum = true
buffer-size = 32767
die-on-term = true
启动时,uWSGI说:
Wed Jul 4 10:58:40 2018 - chdir() to /srv/venv/webapp
Wed Jul 4 10:58:40 2018 - Set PythonHome to /srv/venv/
ImportError: No module named 'wsgi'
每个请求最终以:
Wed Jul 4 10:28:45 2018 - --- no python application found, check your startup logs for errors ---
[pid: 643|app: -1|req: -1/1] 192.168.33.1 () {42 vars in 653 bytes} [Wed Jul 4 10:28:45 2018] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
当我执行cd /srv/venv/webapp
,运行python并键入import wsgi
时,没有错误发生。
任何想法可能有什么问题吗?
更新:当我从virtualenv(/srv/venv/bin/uwsgi
)安装并运行uWSGI时,一切正常。但是为什么它不能与系统范围的uWSGI一起使用?
UPDATE2:我写了一个systemd服务来在启动时运行uWSGI,但它又无法正常工作-同样的错误。我手动执行systemctl restart uwsgi
后,它开始工作。添加10秒的延迟并不能解决问题。我没办法了。
答案 0 :(得分:1)
假设您wsgi.py看起来像这样:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
application = get_wsgi_application()
您的uwsgi.ini需要更新为:
module = wsgi:application
您也可以将其添加到uwsgi.ini中以指定您的虚拟环境:
virtualenv = /path/to/you/virtualenv