nginx + uwsgi 在虚拟主机模式下运行 Django 应用的问题

3 投票
2 回答
6480 浏览
提问于 2025-04-16 23:42

我在我的服务器上有几个django应用,它们各自运行得很好,使用自己的socket文件。不过,我打算再添加一些django应用,所以我更想用虚拟主机模式来运行uwsgi,但似乎在导入和路径上遇到了一些问题。

这是nginx的虚拟主机配置:

location / {

    include uwsgi_params;

    uwsgi_param UWSGI_PYHOME /home/httpd/django.udm.local/public_html;
    uwsgi_param UWSGI_PYHOME /home/httpd/django.udm.local/public_html;
    uwsgi_param UWSGI_PYTHONPATH /home/httpd/django.udm.local/public_html;
    uwsgi_param UWSGI_CHDIR /home/httpd/django.udm.local/public_html
    uwsgi_param UWSGI_ENV DJANGO_SETTINGS_MODULE=settings;
    uwsgi_param UWSGI_MODULE mysite;

    uwsgi_pass  127.0.0.1:1088;

在“mysite.py”文件中,我有这些内容:

import os, sys

sys.path.append(os.path.dirname(__file__))

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

我用这个命令来运行uwsgi:

uwsgi -s 127.0.0.1:1088 -M --no-site --vhost 

然后这是出现的错误:

*** Operational MODE: single process ***
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1838)
spawned uWSGI worker 1 (pid: 1839, cores: 1)
Traceback (most recent call last):
  File "./mysite.py", line 7, in <module>
    import django.core.handlers.wsgi
ImportError: No module named django.core.handlers.wsgi
unable to load app SCRIPT_NAME=django.udm.local|

如你所想,django在系统上是正确安装的。

# python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django.core.handlers.wsgi
>>> 

谢谢!

更新 18/8 我终于找到了解决办法.. 我修改了mysite.py文件,添加了django和python库的路径。

import os, sys

sys.path.append(os.path.dirname(__file__))
sys.path.append('/usr/lib/pymodules/python2.6')
sys.path.append('/usr/lib/python2.6/dist-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

2 个回答

0

我觉得在wsgi文件里添加东西是不太合适的。这样做其实就是把内容写死了。

如果你把代码部署到不同的系统,或者甚至是不同版本的Python,比如python2.6、python2.7等等,那会发生什么呢?这时候就必须在部署的服务器上添加正确的sys.path。

1

UWSGI_PYHOME 会设置一个虚拟环境,所以如果你没有在虚拟环境中,就需要把它去掉。你可能会对这个配置感兴趣:http://projects.unbit.it/uwsgi/wiki/TipsAndTricks

撰写回答