如何在 Ubuntu 上为 Python 设置 Mod_WSGI

如何在 Ubuntu 上为 Python 设置 Mod_WSGI

我正在尝试在我的 Ubuntu 机器上设置 MOD_WSGI。我发现步骤说我需要执行以下步骤,我在http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get 安装 libapache2-mod-wsgi
  2. sudo 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 步失败,因为它说找不到 mod-wsgi,尽管 apt-get 找到了它。如果我继续执行这些步骤,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:~$ 

答案1

我发现这是 mod_wsgi apt-get 软件包的一个已知错误,已有一年多了!详情请见http://www.mail-archive.com/[电子邮件保护]/msg1147225.html。apt-get 包中没有 wsgi.load 文件,因此需要按照上面链接中的步骤来创建。

感谢所有提供帮助的人!

答案2

使用以下命令查看模块是否正确加载:

apache2ctl -t -D DUMP_MODULES

答案3

据我所知,您尚未将 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应该工作。

答案4

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

相关内容