目标WSGI脚本无法作为Python模块加载

Ada*_*mas 48 python apache django mod-wsgi wsgi

我正在尝试使用apache部署mod_wsgi来运行django应用程序但是我收到错误500内部服务器错误apache日志显示:

[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/apache/django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]   File "/home/user/bms/apache/django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]     import django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named django.core.handlers.wsgi
Run Code Online (Sandbox Code Playgroud)

我的apache虚拟主机如下:

<VirtualHost *:80>

    DocumentRoot /home/user/bms

    <Directory /home/user/bms>
        Order allow,deny
        Allow from all
    </Directory>

WSGIDaemonProcess bms user=user group=user processes=2 threads=25 python-path=/usr/local/lib/python2.7/site-packages


    WSGIProcessGroup bms

    WSGIScriptAlias / /home/user/bms/apache/django.wsgi

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

并且我的app目录中引用的wsgi文件具有0777权限:

import os
import sys

path = '/home/user/bms'
if path not in sys.path:
    sys.path.append(path)

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

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)

我听说这可能是因为apache用户没有正确的权限.但是我不知道如何解决这个问题.我也尝试用www-data用户启动deamon,但这并没有解决问题.

编辑:

我通过将虚拟主机文件复制到默认主机文件然后使用a2dissite禁用旧主机文件来解决这个问题.我不知道我怎么能"正确"地做到这一点并设置它以便apache进入我想要它的虚拟主机.

nim*_*ima 51

对我来说问题是wsgi python版本不匹配.我使用的是python 3,所以:

$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3
Run Code Online (Sandbox Code Playgroud)

在复制/粘贴这些命令之前从@alxs发出警告:
如果服务器上运行的python 2项目使用wsgi和apache,则上述命令将有效地关闭它们.

  • 在有人复制/粘贴上述内容之前,请注意如果服务器上运行的python 2项目使用wsgi和apache,则上述命令将有效地关闭它们. (10认同)

Ger*_*rry 18

对我来说,问题是WSGI脚本不可执行.

sudo chmod a+x django.wsgi
Run Code Online (Sandbox Code Playgroud)

要不就

sudo chmod u+x django.wsgi
Run Code Online (Sandbox Code Playgroud)

只要你有正确的所有者

  • django.wsgi 文件在哪里? (3认同)

use*_*443 5

我在日志中遇到此错误消息的类似问题:

目标WSGI脚本'/home/web2py/wsgihandler.py'无法作为Python模块加载.

解决方案是从中删除不正确的WSGIPythonHome指令(指向应用程序目录) /etc/httpd/conf.d/wsgi.conf

我在使用CentOS存储库的RedHat上.

建议遵循Graham Dumpleton的安装/配置说明.针对helloworld应用程序的测试配置显示我mod_wsgi正在运行且配置有问题.

但是,错误消息几乎没有提供任何错误的线索.

  • 在"目标WSGI脚本'/home/web2py/wsgihandler.py'无法作为Python模块加载之后." 在日志中应该有一堆其他东西,包括Python回溯和异常消息.应该有比这更多的信息,这只是第一行,而不是真实的信息. (9认同)

dnm*_*nmh 5

我遇到了同样的问题,起初我没有意识到我可以向下滚动并查看实际的错误消息。就我而言,这是导入错误:

ImportError: No module named bootstrap3
Run Code Online (Sandbox Code Playgroud)

通过pip安装它之后(pip install django-bootstrap3),我重新启动了Apache,它开始工作了。


小智 1

您是否在没有 WSGIDaemonProcess 选项的情况下尝试过?

我在家里设置 mod_wsgi 没有遇到任何问题,但没有使用守护进程选项。您提到通过移动虚拟主机文件来解决问题,我在 WSGIDaemonProcess 的文档中注意到了这一警告:

另请注意,守护进程进程组的名称对于整个服务器必须是唯一的。也就是说,不同的虚拟主机中不能使用相同的守护进程组名称。

不知道是不是巧合。