从 ini 文件启动 uwsgi 崩溃并出现以下堆栈跟踪:
Traceback (most recent call last):
File "/var/www/vhosts/x/projectX/wsgi.py", line 18, in <module>
from django.core.wsgi import get_wsgi_application
File "/var/www/vhosts/x/virtenv/local/lib/python2.7/site-packages/django/core/wsgi.py", line 1, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/var/www/vhosts/x/virtenv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 4, in <module>
import logging
File "/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>
import sys, os, time, cStringIO, traceback, warnings, weakref
ImportError: No module named time
路径 /var/www/vhosts/x/virtenv/ 是正确的 virtualenv,它按预期使用 python 2.7。但由于某种原因,在导入“日志记录”时,它会跳转到 /usr/lib64/
这里还有 2 点需要注意:
- 使用 -p 命令(手动指定 /usr/bin/python2.7 作为 python 版本)并使用 --no-site-packages 设置 virtualenv
- 我们有几乎相同的 uwsgi.ini 文件与另一个 django 应用程序一起使用(那里没有问题)。唯一的区别似乎是这个 projectX 正在运行 Django 1.6.1,而另一个项目正在运行 Django 1.5
最奇怪的是,如果我尝试手动执行 wsgi.py 文件中的代码,它工作得非常好。(我获取 virtualenv,启动 python 命令行并在那里复制 wsgi.py 的命令)
这是 uwsgi.ini 文件:
[uwsgi]
# variables
projectname = projectX
projectdomain = x.mydomain.com
base = /var/www/vhosts/x
# config
socket = 127.0.0.1:8989
chdir = %(base)
wsgi-file = %(base)/%(projectname)/wsgi.py
master = true
pidfile = /tmp/%(projectname)-master.pid
vacuum = true
max-requests = 5000
processes = 10
#harakiri = 20
uid = 109
gid = 113
callable = projectX
env = DJANGO_SETTINGS_MODULE=settings
home = %(base)/virtenv
touch-reload = %(base)
py-autoreload = 3
#daemonize = /var/log/x/uwsgi.log
virtualenv = %(base)/virtenv
pythonpath = %(base)/virtenv/lib/python2.7
pythonpath = %(base)
pythonpath = %(base)/%(projectname)
wsgi.py 文件:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectX.settings")
from django.core.wsgi import get_wsgi_application # <-- this is line 18
application = get_wsgi_application()