(免责声明:我刚开始使用 Linux,没有太多配置 Apache 和 Python 的经验。)
我有一个相当常见的问题,在这里http://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary进行了更深入的解释。基本上,我 99% 确定我的主要问题是我的 Apache 使用的是 expat 库的 1.95.7 版,而我的 Python 使用的是 expat 库的 2.0.1 版;因此,当我将它们一起使用时,我会遇到分段错误。
正如页面最底部的链接中所解释的,我需要将 Apache 使用的 expat 库的版本替换/更新为 Python 使用的版本。我该怎么做?(请记住,我对这种事情非常缺乏经验。)
编辑:这个问题已经解决。下面我记录了我为安装 Apache、从源代码构建 Python、安装 mod_wsgi 以及解决可怕的 expat 问题所做的一切,以供我和其他遇到类似问题的人参考。
1) 用五笔安装 Ubuntu
安装 Apache
2) 在 Ubuntu 上,下载 Apache Unix Source httpd-2.2.21.tar.gz
3) 从 Apache HTTPDd tarbell 中提取源代码:
gzip -d httpd-2.2.21.tar.gz
tar xvf httpd-2.2.21.tar
4) 从提取的目录中配置 Apache HTTPd 源代码树:
sudo ./configure --prefix=/usr/local/apache2
5) 构建构成 Apache HTTPd 包的各个部分:
sudo make
6)将包安装在我在步骤4中指定的目录下
sudo make install
7) 启动 Apache HTTP 服务器:
sudo /usr/local/apache2/bin/apachectl -k start
8)检查本地主机并打印“它工作!”
9) 停止 Apache HTTP 服务器:
sudo /usr/local/apache2/bin/apachectl -k stop
从源代码安装 Python
10) 获取构建任何东西所需的所有通用包(例如编译器等)
sudo apt-get install build-essential
11) 编辑 /etc/apt 中的 sources.list 文件,将文件中包含的完全相同的“deb”行添加到末尾,但“deb-src”除外:
sudo nano /etc/apt/sources.list
12) 更新了 apt-get 以识别变化:
sudo apt-get update
13) 获取构建 Python 所需的所有库:
sudo apt-get build-dep python2.7
14)下载python源代码Python-2.7.2.tgz,解压,在目录下运行如下:
sudo ./configure --enable-shared --prefix=/usr/local
15) 内置 Python:
sudo make
16)安装的Python:
sudo make install
安装 mod_wsgi
17) 下载mod_wsgi源代码tar球mod_wsgi-3.3.tar.gz
18) 从解压目录中解压并使用 python 配置:
sudo ./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-python=/usr/local/bin/python2.7
19)构建配置的包:
sudo make
20) 安装在 Apache 模块中:
sudo make install
21) 下载 Django-1.3.1.tar.gz
22) 提取文件:
tar xzvf Django-1.3.1.tar.gz
23) 从目录中安装 Django 项目:
sudo python setup.py install
24) 编辑 Apache httpd.conf 文件:
sudo nano /usr/local/apache2/conf/httpd.conf
在文件末尾添加了以下指令:
LoadModule wsgi_module /usr/local/apache2/modules/mod_wsgi.so
WSGIScriptAlias / /usr/local/lib/python2.7/site-packages/django/test.wsgi
<Directory /usr/local/lib/python2.7/site-packages/django>
Order deny,allow
Allow from all
</Directory>
25)在django项目目录下创建了一个测试文件:
sudo nano /usr/local/lib/python2.7/site-packages/django/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]
26)启动阿帕奇:
sudo /usr/local/apache2/bin/apachectl -k start
27) 测试本地主机并打印“Hello World!”
28) 停止阿帕奇:
sudo /usr/local/apache2/bin/apachectl -k stop
测试可怕的外籍人士问题:
29) 编辑 test.wsgi 文件:
sudo nano /usr/local/lib/python2.7/site-packages/django/test.wsgi
在文件顶部添加以下内容:
import pyexpat
30)启动阿帕奇:
sudo /usr/local/apache2/bin/apachectl -k start
31)它打印“Hello World!” 有一个神。
32)停止阿帕奇:
$ sudo /usr/local/apache2/bin/apachectl -k stop