2016-08-25 52 views
2

我們正在將我們的python腳本遷移到lua腳本中,作爲apache 2.4升級的一部分。其中一個要求是連接到Sybase數據庫並執行查詢。 要做到這一點,我們已經開發了一個使用mod_lua API來獲取數據庫連接的小代碼,但是我們還沒有成功。apache 2.4 - 使用mod_lua,mod_dbd,freetds無法獲得Sybase數據庫連接

我們已經安裝了帶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

的PARAMS在虛擬主機httpd.conf中,我們增加了以下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錯誤日誌中得到的錯誤是 -

[Thu Aug 25 15:28:03.198044 2016] [dbd:error] [pid 21708:tid 139621318366976](20014)內部錯誤(特定信息不 提供):AH00629:無法連接到freetds的:

[星期四15年8月25日:28:03.198145 2016] [DBD:錯誤] [PID 21708:TID 139621318366976](20014)內部錯誤(特定信息不 提供):AH00633:未能初始化

[星期四15年8月25日:28:03.198184 2016] [LUA:錯誤] [PID 21708:TID 139621318366976] [客戶端10.135.15.148:52836]內部處理方法_1 無法從mod_dbd獲取連接。如果您的數據庫運行的是 ,則可能表示存在權限問題。

我們能夠使用T-SQL來自同一個系統,但是來自Apache的DBD連接來連接到數據庫,不能正常工作。 我們懷疑可能有一些配置(DBDParams)問題或操作系統可能阻止來自Apache的連接

有人可以請這方面的幫助。

+0

我從來沒有使用Sybase,但知道你必須通過TDS_Version = 5.0才能連接(請參閱https://github.com/FreeTDS/freetds/pull/71)。你能找到一種方法來通過你的'DBDParams'的TDS版本嗎?我知道從Python或Perl連接時,我需要在連接字符串中包含TDS_Version。 – FlipperPA

回答

0

我們找到了解決方案。問題出現在我們傳遞的DBDParams中。爲了連接到sybase,我們在「主機」參數(host =)中提供了連接詳細信息(主機:端口)。在進一步研究apr-util-freetds代碼時,我們發現用於Sybase連接,它是**服務器(server =)參數,我們應該提供主機端口連接詳細信息**。

http://www.freetds.org/reference/a00371.html#gaef0e7a5fcf2d8c8f795b2b06ce4de8b1

的DBD PARAMS這工作了Sybase連接使用freetds的是 - DBDParams用戶名= XXX,密碼= XXXXXX,服務器=主機:端口

它有點混亂,因爲在Sybase條款主機通常是服務器主機名/ IP。