0

我的总体目标是让 django 在我没有 root 访问权限的服务器上运行。我已经说服管理员在主 apache 服务器上安装 mod_fcgid,但这基本上是我从 root 端可以做的所有事情。

经过一番努力,我目前的设置是创建一个 virtualenv,在 virtualenv 中安装 django、flup 和 MySQLdb-python,并在 .htaccess 文件使用 fastcgid 的 web 可访问目录中创建一个“mysite.fcgi”脚本。 fcgi 文件。这一切都有效,当我使用浏览器加载 mysite.fcgi 时,我的 django 项目成功到达 - 我知道这一点是因为我得到一个 django 错误页面(而不是我得到的无数“脚本头过早结束”500 页在试图找出所有路径时)。

所以,我得到的 django 错误页面说:

ImproperlyConfigured at /
Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory

但是,我知道基本上一切正常,因为只要在运行之前将此行添加到我的 bash shell 中,我就可以执行“python manage.py runserver”:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/alternate_versions/mysql-5.5.11/lib

因此,我尝试将其添加到我的 .htaccess 文件中:

SetEnv LD_LIBRARY_PATH /opt/alternate_versions/mysql-5.5.11/lib

但是,这不会影响我的 django 错误消息(除了在 django 调试屏幕底部显示正确设置的环境变量)。我不知道为什么这不起作用。

这让我回到了 MySQLdb-python 包。我通过下载源代码并从我的 virtualenv 中运行“python setup.py build”和“python setup.py install”来构建它。但是,这可能是关键问题我需要使用不是系统默认的 mysql 安装! 默认安装没有源代码,也没有 mysql_config 命令。备用安装较新,并且具有 mysql-python 所需的源/开发版本。因此,在 MySQLdb-python 的 site.cfg 文件中,我必须指定 mysql_config 变量以指向备用 mysql 安装:

mysql_config = /opt/alternate_versions/mysql-5.5.11-src/scripts/mysql_config

当我使用 --libs 选项运行 mysql_config 时,它(正确地?)指向 libmysqlclient.so.18 文件所在的目录:

-L/var/alternate_versions/mysql-5.5.11/lib -lmysqlclient -lpthread -lz -lm -lrt -ldl

前进的思路:

是否有另一种构建 MySQLdb 库的方法?我尝试了 site.cfg 文件中的各种选项(静态=True,嵌入式=True),但这也不起作用。我没有尝试这些选项的所有组合,因为我真的不知道他们在做什么。

我可以手动添加 MySQLdb 库的路径吗?我认为它在一个鸡蛋文件中,我不知道如何修改。

如果 MySQLdb 以 root 身份安装,那会有所不同吗?在要求管理员尝试之前,我希望对此选项充满信心。我们仍然有需要备用 mysql 安装的问题。

有没有不同的方法来为 apache 指定 LD_LIBRARY_PATH?

感谢您的任何建议。

4

1 回答 1

1

好的,我通过作弊解决了我的问题。我为我的 Suse 版本下载了一个 rpm,使用以下命令取出文件:

rpm2cpio python-mysql-1.2.2-1.79.x86_64.rpm | cpio -idmv

然后,我将所有文件复制到我的 virtualenv 目录:

cp -pir ./usr/lib64/python2.6/site-packages/* ../virt/lib/python2.6/site-packages/

而且,它奏效了!

于 2012-07-06T04:13:31.010 回答