【问题标题】:problem with nginx + uwsgi in vhost mode, running django appnginx + uwsgi在vhost模式下的问题,运行django app
【发布时间】:2011-08-16 16:21:43
【问题描述】:

我的服务器上有几个 django 应用程序,在它们自己的套接字文件上完美运行,但我计划引入更多 django 应用程序,所以我更喜欢在 vhost 模式下运行 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()

【问题讨论】:

    标签: python django nginx uwsgi


    【解决方案1】:

    UWSGI_PYHOME 将设置一个 virtualenv,所以如果你不在一个 virtualenv 下,你必须删除它。您可能对此配置感兴趣:http://projects.unbit.it/uwsgi/wiki/TipsAndTricks

    【讨论】:

    • 不,同样的错误:将 /home/httpd/ 添加到 pythonpath。 Traceback(最近一次调用):文件“./mysite.py”,第 14 行,在 中 import django.core.handlers.wsgi ImportError: No module named django.core.handlers.wsgi
    • 如您所见,我已经添加了为此找到的解决方案。谢谢!
    【解决方案2】:

    我认为在 wsgi 文件中添加内容是不对的。 如果这样做,它实际上是硬编码的。

    如果您将代码部署到不同的系统甚至不同版本的 Python 会发生什么?也许是 python2.6、python2.7 等,所以必须在部署的服务器上附加正确的 sys.path。

    【讨论】:

    • 这个问题并不过时,因为这发生在 django v1.3 上,现在没有维护,新的 django 版本带有自己的 wsgi 文件,可以“正常工作”将其用于 virtualenv跨度>
    猜你喜欢
    • 2015-11-08
    • 2019-11-29
    • 2012-07-02
    • 2018-08-11
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2014-05-31
    相关资源
    最近更新 更多