【发布时间】:2017-02-12 09:55:54
【问题描述】:
- 服务器操作系统:Red Hat Enterprise Linux Server 5.11 版
- 阿帕奇:2.2.3
- Python:2.7.6
- Mod_WSGI 4.5.3、Web.Py、MySQLdb
嘿!我创建了一个 Web.Py 站点,可以从远程 Oracle 数据库查询数据,该站点运行良好,但现在在尝试从远程 MySQL 数据库创建用户身份验证时遇到了问题。
按照此处的步骤操作:http://webpy.org/cookbook/userauthpgsql
完全相同的程序在 python 命令行中运行,但由于某种原因,当尝试从 Apache 连接到远程 MySQL 数据库时,我收到以下错误:
<type 'exceptions.AttributeError'> at /login
'module' object has no attribute 'connect'
我尝试过的事情:
- 列表项
- 已禁用 SELinux
- 将 apache@myserversIP 的权限添加到 MySQL。
- 尝试了 MySQLdb 和 web.database 的连接
- 用 Google 搜索了很多。
这是从我的主程序运行的代码:
myDB = MySQLdb.connect(host='ip',user='user',passwd='password',db='db',port=3306 );
cHandler = myDB.cursor()
cHandler.execute("SHOW TABLES;")
results = cHandler.fetchall()
for items in results:
print items
任何有关此问题的帮助或进一步诊断它的方法将不胜感激!谢谢
Edit1:我检查了从哪里搜索 MySQLdb:/usr/local/lib/python2.7/site-packages
这似乎是正确的。
编辑2:
ldd mod_wsgi.so
linux-vdso.so.1 => (0x00007fff4b5fd000)
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0
libpthread.so.0 => /lib64/libpthread.so.0
libdl.so.2 => /lib64/libdl.so.2
libutil.so.1 => /lib64/libutil.so.1
libm.so.6 => /lib64/libm.so.6
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
【问题讨论】:
-
如果您记录
MySQLdb.__file__的值,您会得到什么?你确定你的代码中没有一个名为MySQLdb.py的文件吗? -
嘿格雷厄姆!通过 Apache 运行时,它是空的,从 cmdline 运行时它是 /usr/local/lib/python2.7/site-packages/MySQLdb/__init__.pyc 我也确定我没有另一个名为 MySQLdb 的文件.py
-
提供您的 mod_wsgi 配置?检查为哪个版本的 Python mod_wsgi 编译?可能它不是为您的 Python 2.7 安装编译的,这导致了所有问题。见modwsgi.readthedocs.io/en/develop/user-guides/…
-
sys.version = '2.7.6(默认,2016 年 6 月 28 日,15:58:57)\n[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)]' sys. prefix = '/usr/local' Python 版本似乎是正确的。这是一个愚蠢的问题,但我找不到 wsgi.conf。它不在 /etc/httpd/conf.d/wsgi.conf 中,并且 locate 无法找到它。
-
如果您想要使用的 Python 版本有
sys.prefix或/usr/local,这可能是一个直接的问题。查看 modwsgi.readthedocs.io/en/develop/user-guides/… 并计算出ldd在mod_wsgi.so文件上显示的内容。如果它没有使用来自/usr/local/lib的 Python 共享库,则可能会导致问题。如果您在系统位置和/usr/local中都有 Python 2.7.X,则需要通过特殊步骤从源代码构建 mod_wsgi,以便找到正确的库。
标签: python apache mod-wsgi mysql-python web.py