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

时间:2012-07-05 17:40:45

标签: django apache virtualenv fastcgi

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

经过大量的努力,我目前的设置是创建virtualenv,在virtualenv中安装django,flup和MySQLdb-python,并在.htaccess文件使用的Web可访问目录中创建一个“mysite.fcgi”脚本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安装!默认安装没有source和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文件中的各种选项(static = True,embedded = True),但这也不起作用。我没有尝试这些选项的所有组合,因为我真的不知道他们在做什么。

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

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

是否有不同的方法为apache指定LD_LIBRARY_PATH?

感谢您的任何建议。

1 个答案:

答案 0 :(得分: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/

并且,它有效!

相关问题