apache2 和 mod wsgi:目标 WSGI 脚本无法作为 Python 模块加载 [英] apache2 and mod wsgi : Target WSGI script cannot be loaded as Python module

查看:41
本文介绍了apache2 和 mod wsgi:目标 WSGI 脚本无法作为 Python 模块加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 ubuntu 上的 apache2 上安装 mod_wsgi.所以我安装了 libapache2-mod-wsgi 包,我用 a2enmod 激活了他.

I am trying to install mod_wsgi on apache2, on ubuntu. So I install libapache2-mod-wsgi package, I activate him with a2enmod.

我有一个网站 (languageAnalyz),我正在尝试与 mod_wsgi 一起使用.当我调用 localhost/languageAnalyz 时,出现错误 500.

I got a web site (languageAnalyz), that I am trying to use with mod_wsgi. When I call localhost/languageAnalyz, I got an error 500.

在 apache2 日志中,我可以看到:

In apache2 log, I can see this :

[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1] mod_wsgi (pid=4993): Target WSGI script '/var/www/languageAnalyz/test-wsgi.py' cannot be loaded as Python module.
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1] mod_wsgi (pid=4993): SystemExit exception raised by WSGI script '/var/www/languageAnalyz/test-wsgi.py' ignored.
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1] Traceback (most recent call last):
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]   File "/var/www/languageAnalyz/test-wsgi.py", line 10, in <module>
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]     WSGIServer(app).run()
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi.py", line 112, in run
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]     sock = self._setupSocket()
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi_base.py", line 997, in _setupSocket
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]     req.run()
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi_base.py", line 572, in run
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]     self._end(appStatus, protocolStatus)
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi_base.py", line 601, in _end
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1]     sys.exit(appStatus)
[Sun Aug 25 11:28:21 2013] [error] [client 127.0.0.1] SystemExit: 0

我在谷歌上搜索了这个错误,我找到了很多解决方案(大部分时间是针对 Django 项目的).我不明白的是,我需要创建一个 __init__.py 文件.我所做的,这是我的 __init__.py 文件:

I googled this error, and I find lot of solutions (most of the times for Django project). What I undsertand, is that I need to create a __init__.py file. What I did, here is my __init__.py file :

__all__ = ['app','get_size_dir','get_nbrf_dir','getStats'] #name of my functions
import index # my three python files
import analyz
import test-wsgi

__all__列表中,这是三个文件中函数的名称.我只是想启动 test-wsgi.py,并得到相同的错误 500.

In the __all__ list, this is the name of the functions in the three files. I am just trying to launch test-wsgi.py, and get the same error 500.

这是我的 test-wsgi.py 文件:

Here is my test-wsgi.py file :

import os,sys
sys.path.append(os.path.dirname(__file__))
from cgi import escape,parse_qs
from flup.server.fcgi import WSGIServer
def app(environ, start_response):
  start_response('200 OK',[('Content-Type','text/plain; charset=utf-8')])
   yield "hello world!"
WSGIServer(app).run()

怎么了?谢谢,

这是我的 apache2 conf:

Edit : here is my apache2 conf :

WSGIPythonPath /var/www/languageAnalyz
<VirtualHost *:80>
  ...
  <Directory /var/www/languageAnalyz/>
    Options +Indexes ExecCGI FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
    DirectoryIndex index.py
    SetHandler wsgi-script
  </Directory>
  ...
</VirtualHost>

编辑之二:所以我试着按照我在 django doc 上阅读的内容去做.我将我的 apache2 conf 更改为:

Edit_bis : So I try to do as I read on django doc. I change my apache2 conf to :

WSGIPythonPath /var/www/languageAnalyz
<VirtualHost *:80>
  ...
   WSGIScriptAlias /IPA /var/www/languageAnalyz/testwsgi.py
    <Directory /var/www/languageAnalyz/>
            Options +Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all
            DirectoryIndex testwsgi.py
    </Directory>

  ...
</VirtualHost>

我重新启动了 apache2,我得到了同样的错误,之前还有一个:

I restart apache2, and I got the same error, and one more before :

[Sun Aug 25 12:47:18 2013] [notice] caught SIGTERM, shutting down
[Sun Aug 25 12:47:19 2013] [notice] FastCGI: wrapper mechanism enabled (wrapper: /usr/lib/apache2/suexec)
[Sun Aug 25 12:47:19 2013] [notice] FastCGI: process manager initialized (pid 7879)
[Sun Aug 25 12:47:19 2013] [notice] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads.
[Sun Aug 25 12:47:19 2013] [notice] mod_python: using mutex_directory /tmp
[Sun Aug 25 12:47:19 2013] [warn] mod_wsgi: Compiled for Python/2.7.3.
[Sun Aug 25 12:47:19 2013] [warn] mod_wsgi: Runtime using Python/2.7.4.
[Sun Aug 25 12:47:19 2013] [notice] Apache/2.2.22 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 PHP/5.4.9-4ubuntu2.2 mod_python/3.3.1 Python/2.7.4 mod_ruby/1.2.6 Ruby/1.8.7(2012-02-08) mod_wsgi/3.4 configured$
[Sun Aug 25 12:47:19 2013] [error] WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
[Sun Aug 25 12:47:19 2013] [error] WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
[Sun Aug 25 12:47:19 2013] [error] WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
[Sun Aug 25 12:47:19 2013] [error] WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
[Sun Aug 25 12:47:19 2013] [error] Status: 200 OK\r
[Sun Aug 25 12:47:19 2013] [error] Content-Type: text/plain; charset=utf-8\r
[Sun Aug 25 12:47:19 2013] [error] \r
[Sun Aug 25 12:47:19 2013] [error] hello world!
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1] mod_wsgi (pid=7884): Target WSGI script '/var/www/languageAnalyz/testwsgi.py' cannot be loaded as Python module.
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1] mod_wsgi (pid=7884): SystemExit exception raised by WSGI script '/var/www/languageAnalyz/testwsgi.py' ignored.
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1] Traceback (most recent call last):
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]   File "/var/www/languageAnalyz/testwsgi.py", line 10, in <module>
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]     WSGIServer(app).run()
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi.py", line 112, in run
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]     sock = self._setupSocket()
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi_base.py", line 997, in _setupSocket
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]     req.run()
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi_base.py", line 572, in run
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]     self._end(appStatus, protocolStatus)
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]   File "/usr/local/lib/python2.7/dist-packages/flup/server/fcgi_base.py", line 601, in _end
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1]     sys.exit(appStatus)
[Sun Aug 25 12:47:19 2013] [error] [client 127.0.0.1] SystemExit: 0

编辑者:

好的,我刚刚成功启动了 testwsgi.py.我将我的应用程序功能更改为应用程序,并在最后添加了一些行:

Ok, I just successfully launch testwsgi.py. I change my app function into application, and I add some lines at the end :

if __name__ == '__main__':
  from wsgiref.simple_server import make_server
  server = make_server('localhost', 8080, application)
  server.serve_forever()

我不知道为什么它有效,为什么它以前不起作用....现在我在打开文件时遇到了一些问题,包括它们的路径(配置文件或模板文件...)

I event don't know, why it's working, why it was not working before. ... And now I got some problem to open files, with their path (config files, or templates files ...)

[Sun Aug 25 13:10:51 2013] [error] [client 127.0.0.1]   File "/var/www/languageAnalyz/analyz.py", line 22, in getStats
[Sun Aug 25 13:10:51 2013] [error] [client 127.0.0.1]     flangs=open('config/languages.yml')

我尝试使用绝对路径,它也不起作用......

I try with absolute path, it didn't work too ...

推荐答案

对于不同的文件,我遇到了同样的问题,并使文件世界可执行为我修复了它.在将范围缩小为您的问题后,您当然希望将其锁定到所需的用户:

I had the same problem for a differnt file and making the file world executable fixed it for me. You would of course want to lock it down to the required user after you have narrowed this down as your issue:

chmod a+x test-wsgi.py

这篇关于apache2 和 mod wsgi:目标 WSGI 脚本无法作为 Python 模块加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆