【问题标题】:Remote MySQL connection works from cmdline, but not with Apache (Webpy, Mod-WSGI)远程 MySQL 连接可从 cmdline 工作,但不适用于 Apache(Webpy、Mod-WSGI)
【发布时间】: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'

我尝试过的事情:

  1. 列表项
  2. 已禁用 SELinux
  3. 将 apache@myserversIP 的权限添加到 MySQL。
  4. 尝试了 MySQLdb 和 web.database 的连接
  5. 用 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/… 并计算出 lddmod_wsgi.so 文件上显示的内容。如果它没有使用来自/usr/local/lib 的 Python 共享库,则可能会导致问题。如果您在系统位置和/usr/local 中都有 Python 2.7.X,则需要通过特殊步骤从源代码构建 mod_wsgi,以便找到正确的库。

标签: python apache mod-wsgi mysql-python web.py


【解决方案1】:

正如已评论的那样,检查是否存在与您尝试运行的文件位于同一目录中的文件,该文件的名称为 MySQLdb.py

【讨论】:

  • 我希望它是那么容易,但没有。
猜你喜欢
  • 2015-10-21
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
相关资源
最近更新 更多