我们正在将我们的python脚本迁移到lua脚本,作为apache 2.4升级的一部分。其中一个要求是连接到Sybase数据库并执行查询。 为此,我们使用mod_lua api开发了一个小代码来获取数据库连接,但我们还没有成功。
我们已经安装了带有freetds的apr-util。
要使用mod_lua,mod_dbd和freetds获取数据库连接 - 我们按照此处提到的步骤进行操作 - http://modlua.org/api/database#dbd
要为freetds配置DPDParams,我们按照此处提到的参数进行操作 https://httpd.apache.org/docs/2.4/mod/mod_dbd.html#DBDParams
在httpd.conf的VirtualHost中,我们添加了以下dbdparams
DBDriver freetds
DBDParams username = xxx,password = xxx,host = host-ip:port
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错误日志中遇到的错误是 -
[Thu Aug 25 15:28:03.198044 2016] [dbd:error] [pid 21708:tid 139621318366976](20014)内部错误(具体信息不是 可用):AH00629:无法连接到freetds:
[Thu Aug 25 15:28:03.198145 2016] [dbd:error] [pid 21708:tid 139621318366976](20014)内部错误(具体信息不是 可用):AH00633:初始化失败
[Thu Aug 25 15:28:03.198184 2016] [lua:error] [pid 21708:tid 139621318366976] [client 10.135.15.148:52836]句柄method_1内部 无法从mod_dbd获取连接。如果您的数据库是 运行时,这可能表示权限问题。
我们能够使用tsql 从同一系统连接到数据库,但是来自apache dbd的连接无效。 我们怀疑可能存在一些配置(DBDParams)问题或操作系统可能阻止来自apache的连接
有人可以帮助这方面。
答案 0 :(得分:0)
我们找到了解决方案。我们传递的DBDParams存在问题。为了连接到sybase,我们在'host'参数(host =)中提供了连接详细信息(host:port)。在进一步查看apr-util-freetds代码时,我们发现对于Sybase连接它是**服务器(server =)param,我们应该提供主机端口连接详细信息**。
http://www.freetds.org/reference/a00371.html#gaef0e7a5fcf2d8c8f795b2b06ce4de8b1
使用freetds为Sybase连接工作的DBD Params是 - DBDParams username = xxx,password = xxxxxx,server = h.o.s.t:port
它有点令人困惑,因为在sybase术语中,host通常是服务器hostname / ip。