uwsgi与django - django uwsgi导入离开虚拟环境导致崩溃

2 投票
1 回答
537 浏览
提问于 2025-04-17 21:19

从 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/ 是正确的虚拟环境,并且它使用的是预期中的 Python 2.7。但是,不知道为什么,当导入 "logging" 时,它跳到了 /usr/lib64/。

这里还有两点需要注意:

  1. 虚拟环境是通过 -p 命令设置的(手动指定 /usr/bin/python2.7 作为 Python 版本),并且使用了 --no-site-packages。
  2. 我们有一个几乎相同的 uwsgi.ini 文件在另一个 Django 应用中运行得很好(那里没有问题)。唯一的不同似乎是这个项目X运行的是 Django 1.6.1,而另一个项目运行的是 Django 1.5。

最奇怪的是,如果我尝试手动执行 wsgi.py 文件中的代码,它运行得非常正常。(我先激活虚拟环境,启动 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()

1 个回答

1

通过把

env = DJANGO_SETTINGS_MODULE=settings

改成

env = DJANGO_SETTINGS_MODULE=projectX.settings

来解决了这个问题。

不过,如果有人知道为什么在django 1.5上可以用,而在1.6.1上不行,我会很感兴趣。

撰写回答