如何在Ubuntu上为Python设置Mod_WSGI


25

我正在尝试在Ubuntu盒子上设置MOD_WSGI。我已经找到步骤,说我需要执行以下步骤,这些步骤可以从http://ubuntuforums.org/showthread.php?t=833766找到。

  1. 须藤apt-get install libapache2-mod-wsgi
  2. 须藤a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2重新启动
  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重新启动
  2. 使用创建了test.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-get找到它也找不到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 <ubuntu-motu@lists.ubuntu.com>
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 <python-modules-team@lists.alioth.debian.org>
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:~$ 

什么找不到mod_wsgi,Apache或Python?
Dana the Sane,

1
a2enmod命令找不到mod_wsgi
AutomatedTester

Answers:




4

据我所知,您尚未将mod_wsgi模块加载到httpd.conf

我首先尝试将wsgi文件添加到mods-enabledApache目录中。

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,它应该可以工作。


2

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

dpkg -l libapache2-mod-wsgi

这应该为您提供输出,包括名称,版本等。-查找名称左侧的字母,这表明软件包的当前状态。要手动检查,请查看/ etc / apache2 / mods-available /,您应该同时看到wsgi.confwsgi.load。如果存在,则它们应该在/ etc / apache2 / mods-enabled /中具有相应的符号链接。

如果其中一个都不存在,请首先修复该问题-如果apache找不到解释器,则无法通过apache解释python代码。同样,给定已配置的AddHandler指令,您的test.py脚本将不起作用-该指令告诉apache将某个扩展名的文件传递给相关的处理程序。使您的脚本test.wsgi或更改AddHandler指令。


test.py是问题中的错字。我打算放test.wsgi。
AutomatedTester

很好,但是您是否已按照上述说明确认模块已安装并正确链接?
Zayne S Halsall,2009年

我已将您要求的信息放入问题中。
AutomatedTester 2009年

并非所有的信息-请手动检查文件wsgi.confwsgi.load的/ etc / apache2的/ MODS的可用/符号链接到在/ etc / apache2的/启用MODS-的要求。一个简单的目录长列表就足够了(即ls -alh / etc / apache2 / mods-enabled /)。
Zayne S Halsall

1

您是否添加了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。


test.py是问题中的错字。我打算放test.wsgi。我确实运行过a2enmod,但它说找不到问题末尾的mod_wsgi
AutomatedTester,2009年

1

您可以先查看python的语法。检查函数定义后是否确实有4个空格。首先通过终端运行它来检查python文件

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

然后如果没有错误出现,请通过网络浏览器运行它。

http:// localhost / wsgi /

顺便说一句,您似乎已经丢失了apache配置/ virtualhost文件的某些内容。把它放在标签里面

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

顺便说一下,apt在安装wsgi模块时没有问题。我刚刚对其进行了测试,并且已经在我的Web浏览器上成功运行了python脚本。


0

不确定是否相关,但是在运行之后:

apt-get install libapache2-mod-wsgi

...以下文件存在:

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

重新安装似乎不能替换丢失的文件。奇怪的!但是,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.