尝试让MySQL-python使用apache / FastCGI为django工作,没有root访问权限



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

经过大量的挣扎,我目前的设置是创建一个virtualenv,在virtualenv中安装django,flup和MySQLdb-python,并在Web可访问的目录中创建一个"mysite.fcgi"脚本,.htaccess文件使用fastcgid作为.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

但是,我知道一切基本正常,因为我可以做"python manage.py runserver",只要我在运行前将这一行添加到我的 bash shell 中:

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 的站点.cfg文件中,我必须指定指向备用 mysql 安装的mysql_config变量:

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 库? 我尝试了站点.cfg文件中的各种选项(静态=真,嵌入=真),但这也不起作用。 我没有尝试这些选项的所有组合,因为我真的不知道他们在做什么。

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

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

有没有其他方法可以指定 Apache 的LD_LIBRARY_PATH?

感谢您的任何建议。

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

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

然后,我将所有文件复制到我的虚拟环境目录:

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

而且,它奏效了!

相关内容

最新更新