2016-08-25 5 views
2

Nous migrons nos scripts python vers des scripts lua dans le cadre de la mise à niveau d'Apache 2.4. Une des exigences est de se connecter à la base de données Sybase et d'exécuter des requêtes. Pour ce faire, nous avons développé un petit code en utilisant mod_lua api pour obtenir une connexion db, mais nous n'avons pas réussi.apache 2.4 - Impossible d'obtenir une connexion à la base de données Sybase en utilisant mod_lua, mod_dbd, freetds

Nous avons installé le apr-util avec freetds.

Pour obtenir la connexion de base de données à l'aide mod_lua, module mod_dbd et freetds - nous avons suivi les étapes mentionnées ici - http://modlua.org/api/database#dbd

Pour configurer les DPDParams pour freetds, nous avons suivi les params mentionnés ici https://httpd.apache.org/docs/2.4/mod/mod_dbd.html#DBDParams

En VirtualHost de httpd.conf, nous avons ajouté les dbdparams suivants

DBDriver FreeTDS

DBDParams username = xxx, password = xxx, host = host-ip: port

DBDMax 10

et le code Lua, juste pour obtenir une connexion de base de données est

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 

L'erreur que nous recevons dans le journal des erreurs d'apache est -

[Jeudi 25 août 15: 28: 03.198044 2016] [dbd: error] [pid 21708: tid 139621318366976] (20014) Erreur interne (informations spécifiques non disponibles ): AH00629: Impossible de se connecter à freetds:

[Jeu 25 août 15: 28: 03,198145 2016] [DBD: error] [pid 21708: tid 139621318366976] (20014) erreur interne (informations spécifiques non disponibles): AH00633: pas initialiser

[Jeu 25 août 15: 28: 03,198184 2016] [lua: error] [pid 21708: tid 139621318366976] [ client 10.135.15.148:52836] handle interne method_1 Impossible d'acquérir la connexion à partir de mod_dbd. Si votre base de données est en cours d'exécution, cela peut indiquer un problème d'autorisation.

Nous sommes en mesure de se connecter à la base de données en utilisant tsql du même système, mais la connexion de apache DBD, ne fonctionne pas. Nous suspectons qu'il pourrait y avoir quelques problèmes de configuration (DBDParams) ou que le système d'exploitation peut bloquer la connexion d'apache

Quelqu'un pourrait-il aider à cet égard.

+0

Je n'ai jamais travaillé avec Sybase, mais sachez que vous devez passer TDS_Version = 5.0 pour vous connecter (voir la conversation ici: https://github.com/FreeTDS/freetds/pull/71). Pouvez-vous trouver un moyen de passer la version TDS avec votre 'DBDParams'? Je sais que lors de la connexion à partir de Python ou Perl, j'ai besoin d'inclure le TDS_Version dans la chaîne de connexion. – FlipperPA

Répondre

0

Nous avons trouvé la solution. Le problème était là dans les DBDParams que nous passions. Pour se connecter à sybase, nous fournissions les détails de connexion (hôte: port) dans le paramètre 'hôte' (hôte =). En regardant plus loin dans le code de apr-util-freetds, nous avons trouvé que pour la connexion de Sybase c'est le ** serveur (server =) param où nous devrions fournir les détails de connexion de port d'hôte **.

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

Le DBD Params qui a travaillé pour connexion Sybase à l'aide freetds est - DBDParams username = xxx, mot de passe = xxxxxx, server = host: port

Il est un peu confus parce qu'en termes de sybase host est normalement le nom d'hôte/ip du serveur.