如何在Ubuntu上为Python设置Mod_WSGI

我想在我的Ubuntu盒子上设置MOD_WSGI。 我find了一些步骤,说我需要按照以下步骤进行操作: http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get install libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2 restart
  4. sudo gedit / etc / apache2 / sites-available / default并更新目录
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews ExecCGI AddHandler cgi-script .cgi AddHandler wsgi-script .wsgi AllowOverride None Order allow,deny allow from all </Directory> 
  1. sudo /etc/init.d/apache2 restart
  2. 创buildtest.wsgi

     def application(environ, start_response): status = '200 OK' output = 'Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] 

第2步失败,因为它说即使apt-getfind它也找不到mod-wsgi。 如果我继续使用python应用程序在浏览器中显示为纯文本的步骤。

任何想法我做错了什么?


编辑:问题结果

 automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Description +++-======================================-======================================-============================================================================================ ii libapache2-mod-wsgi 2.5-1 Python WSGI adapter module for Apache automatedtester@ubuntu:~$ dpkg -s libapache2-mod-wsgi Package: libapache2-mod-wsgi Status: install ok installed Priority: optional Section: python Installed-Size: 376 Maintainer: Ubuntu MOTU Developers <[email protected]> Architecture: i386 Source: mod-wsgi Version: 2.5-1 Depends: apache2, apache2.2-common, libc6 (>= 2.4), libpython2.6 (>= 2.6), python (>= 2.5), python (<< 2.7) Suggests: apache2-mpm-worker | apache2-mpm-event Conffiles: /etc/apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6 /etc/apache2/mods-available/wsgi.conf 408487581dfe024e8475d2fbf993a15c Description: Python WSGI adapter module for Apache The mod_wsgi adapter is an Apache module that provides a WSGI (Web Server Gateway Interface, a standard interface between web server software and web applications written in Python) compliant interface for hosting Python based web applications within Apache. The adapter provides significantly better performance than using existing WSGI adapters for mod_python or CGI. Original-Maintainer: Debian Python Modules Team <[email protected]> Homepage: http://www.modwsgi.org/ automatedtester@ubuntu:~$ sudo a2enmod libapache2-mod-wsgi ERROR: Module libapache2-mod-wsgi does not exist! automatedtester@ubuntu:~$ sudo a2enmod mod-wsgi ERROR: Module mod-wsgi does not exist! 

进一步编辑RMYates

 automatedtester@ubuntu:~$ apache2ctl -t -D DUMP_MODULES apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName Loaded Modules: core_module (static) log_config_module (static) logio_module (static) mpm_worker_module (static) http_module (static) so_module (static) alias_module (shared) auth_basic_module (shared) authn_file_module (shared) authz_default_module (shared) authz_groupfile_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) cgid_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) mime_module (shared) negotiation_module (shared) python_module (shared) setenvif_module (shared) status_module (shared) Syntax OK automatedtester@ubuntu:~$ 

看看模块是否实际加载正确:

 apache2ctl -t -D DUMP_MODULES 

我发现这是一个已知的错误,使用了一年多的mod_wsgi apt-get包。 详情请见http://www.mail-archive.com/[email protected]/msg1147225.html 。 apt-get包没有wsgi.load文件,因此需要通过执行上面链接中的步骤来创build。

感谢所有帮助过的人!

据我所见,你还没有加载mod_wsgi模块到你的httpd.conf

我首先尝试将wsgi文件添加到Apache的mods-enabled目录。

 sudo ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled sudo ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled 

然后重新启动Apache,它应该工作。

首先确认WSGI模块实际安装了:

 dpkg -l libapache2-mod-wsgi 

这应该给你输出包括名称,版本等 – 寻找名称左侧的字母,这表示包的当前状态。 要手动检查,请查看/ etc / apache2 / mods-available / ,你应该看到wsgi.confwsgi.load 。 如果存在,则应该在/ etc / apache2 / mods-enabled /中有对应的符号链接。

如果两者都不存在,首先修复 – 如果apache找不到解释器,则不能通过apache解释python代码。 而且,你的test.py脚本在给定了你configuration的AddHandler指令后将不起作用 – 该指令告诉apache将特定扩展的文件传递给相关的处理程序。 使脚本test.wsgi或更改AddHandler指令。

你有没有添加LoadModule行来实际导致mod_wsgi被加载? 什么是实际的错误信息,它来自哪里? 看到:

http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

为低级指示。 既然你正在使用二进制包,你可以跳过编译,但你仍然需要加载mod_wsgi。 在哪里/如何做到这一点将由您的Linux发行版在一定程度上决定。 基于这个指南,你的意思是运行:

 sudo a2enmod mod-wsgi sudo /etc/init.d/apache2 restart 

你真的这样做了吗?


编辑

再次读你的问题是显而易见的。 你说扩展名为.wsgi的文件是由mod_wsgi处理的,但是你给了.py扩展名。 改用.wsgi代替。

你可以先看看你的Python的语法。 检查函数定义后是否真的有4个空格。 首先通过terminal运行它来检查python文件

 $ python /var/www/py/wsgi_handler.wsgi 

那么如果没有错误出现,请通过网页浏览器运行。

HTTP://本地主机/ WSGI /

顺便说一下,你似乎已经错过了你的Apacheconfiguration/虚拟主机文件的东西。 把它放在标签里面

 WSGIScriptAlias /wsgi /var/www/py/wsgi_handler.py 

顺便说一下,apt安装wsgi模块时没有问题。 我已经testing了它,并成功地在我的Web浏览器上运行了python脚本。

不知道这是否有关,但运行后:

 apt-get install libapache2-mod-wsgi 

…以下文件存在:

 /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-available/wsgi.load 

重新安装似乎并没有取代缺less的文件。 奇怪的! 然而, purge似乎是伎俩:

 apt-get install libapache2-mod-wsgi apt-get purge libapache2-mod-wsgi apt-get install libapache2-mod-wsgi # ls /etc/apache2/mods-available/ | grep wsgi wsgi.conf wsgi.load