作为apache 2.4升级的一部分,我们正在将python脚本迁移到lua脚本。其中一个需求是连接到Sybase数据库并执行查询。为了做到这一点,我们已经开发了一个小代码使用mod_lua api来获得数据库连接,但我们还没有成功。
我们已经安装了apr-util。
要使用mod_lua、mod_dbd和freetds获得数据库连接—我们遵循这里提到的步骤—http://modlua.org/api/database dbd
为自由配置DPDParams,我们遵循这里提到的参数https://httpd.apache.org/docs/2.4/mod/mod_dbd.html DBDParams
在httpd.conf的VirtualHost中,我们添加了以下dbdparams
DBDriver freetds
DBDParams用户名= xxx,密码= xxx,主机=主机ip:端口
DBDMax 10
和lua代码,只是为了获得数据库连接是
require "apache2"
require "string"
function handle(r)
r.content_type = "text/html"
local database, err = r:dbacquire("mod_dbd")
r:err("inside handle method_1 " .. err)
return apache2.OK
end
我们在apache错误日志中得到的错误是-
[p>[Thu Aug 25 15:28:03.198044 2016] [dbd:error] [pid 21708:tid .139621318366976](20014)内部错误(具体信息没有可用):AH00629:无法连接到自由:[Thu Aug 25 15:28:03.198145 2016] [dbd:error] [pid 21708:tid .139621318366976](20014)内部错误(具体信息没有): AH00633:初始化
失败[p>[Thu Aug 25 15:28:03.198184 2016] [lua:error] [pid 21708:tid .[client 10.135.15.148:52836]内部处理方法无法从mod_dbd获取连接。如果数据库是运行中,这可能表明权限有问题。
我们能够从同一个系统使用tsql连接到数据库,但是从apache dbd连接,不工作。我们怀疑可能有一些配置(DBDParams)问题,或者操作系统可能阻塞了来自apache的连接
我们找到了解决方案。问题就在我们正在通过的DBDParams中。为了连接到sybase,我们在'host'参数(host=)中提供了连接细节(host:port)。在进一步查看apr-util-freetds代码时,我们发现对于Sybase连接,它是**server(server=)参数,我们应该在其中提供主机端口连接细节**。
http://www.freetds.org/reference/a00371.html gaef0e7a5fcf2d8c8f795b2b06ce4de8b1
使用freetds的Sybase连接的DBD参数是- DBDParams用户名= xxx,密码= xxxxxx,服务器= h.o.s.t:端口
这有点令人困惑,因为在sybase术语中host通常是服务器主机名/ip