为什么Django Jython连接MySQL数据库会出现“通信链接失败”?
我正在尝试把一个用 Django 和 cPython 写的应用程序转换成可以在 Tomcat 上运行的 WAR 文件,使用 Jython。我们使用的是 MySQL 数据库(在 cPython 中用的是 MySQLdb,在 Jython 中用的是 mysql-connector-java-5.1.15-bin.jar)。我已经在两个配置之间更改了 DATABASE_ENGINE。这个应用在 cPython 下运行得很好(在我禁用了 SELinux 对数据库 HTTP 连接的限制后)。首页、图片和静态内容在 Jython 中都能正常工作。但是,当我请求一个需要访问数据库的页面时,它似乎会卡住一段时间,然后返回以下信息:
通信链接失败
最后一次成功发送到服务器的数据包是在 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。[SQLCode: 0], [SQLState: 08S01]
有没有人遇到过这种情况?我没有看到最近有关于这种类型或问题的讨论。我使用的是 Django 1.2.5 和 Jython 2.5.2。我尝试在 Fedora(jre-1.6.0-openjdk.x86_64)和 Windows(Java(TM) SE Runtime Environment (build 1.6.0_23-b05))下运行这个 Java 应用,结果都是一样的。我还尝试了 mysql-connector-java-5.1.15-bin.jar(最新版本)和 mysql-connector-java-5.1.10-bin.jar(根据 http://packages.python.org/django-jython/database-backends.html 的说法是“经过广泛测试”的版本)。这些不同的配置都没有改变这个问题的表现。
我该如何解决这个问题,或者接下来应该去哪里找线索呢?
1 个回答
我找到了错误。回头看,这个错误真是太明显了。我在数据库服务器的IP地址上打错了字,但这个错误只出现在jython分支的配置文件里。结果,Jython实例卡住了,而cPython实例却没问题。当我把这两个合并成一个settings.py文件时(用“if os.name=='java'”来做必要的jython更改),才发现了这个错误。
那么……在这种情况下,应该怎么处理呢?我应该删掉这个问题,还是留着,以防别人也犯我这样的错误?