Oracle DB Zugriff über Apache2

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
)Chris(
User
Beiträge: 3
Registriert: Donnerstag 9. August 2012, 12:24

Hallo Leute,

ich habe mir eine .cgi gebaut mit der ich über das Modul cx_Oracle von einer OracleDB eine kleine Tabelle ausgebe.
Diese funktioniert wunderbar wen ich Sie über die Konsole aufrufe.
Aber sobald ich über den Webserver apache2 gehe wird mir eine solche Fehlermeldung angezeigt.

Wen ich die Zeile: "import cx_Oracle" auskommentiere sehe ich ein Ergebniss und kein Fehler.

Code: Alles auswählen

<type 'exceptions.ImportError'> Python 2.6.5: /usr/bin/python

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

 /usr/lib/cgi-bin/Testdatei.cgi in () 
    3 import sqlite3
 
    4 import cgitb; cgitb.enable()
 
 [b]   5 import cx_Oracle[/b] 

    6 # Dokument-Typ
 
    7 print("Content-type: text/html;charset=utf-8\n")
 
cx_Oracle undefined 

<type 'exceptions.ImportError'>: libclntsh.so.10.1: cannot open shared object file: No such file or directory 
      args = ('libclntsh.so.10.1: cannot open shared object file: No such file or directory',) 
      message = 'libclntsh.so.10.1: cannot open shared object file: No such file or directory' 

Ich habe die Vermutung das meine Umgebungsvariablen falsch sind, aber diese habe ich schon öfter korrigiert.


Ich arbeite auf Ubuntu mit apache2 und python.
Wäre über Hilfe sehr erfreut.
Danke im Vorraus.
Zuletzt geändert von )Chris( am Donnerstag 9. August 2012, 13:10, insgesamt 1-mal geändert.
deets

Schreib doch mal in das CGI etwas der Art

Code: Alles auswählen

import pprint
import os
pprint.pprint(os.environ)
und vergleich das mit dem, was du im "normalen" Python zu sehen bekommst.

Dann noch ein paar Anmerkungen:

- benutze bitte die python-code-tags wenn du code postest
- CGI ist uralt, imperformant und auch architektonisch nicht wirklich auf der Hoehe der Zeit. Besser waere es einen etablierten Standard wie WSGI zu benutzen, und ihn zB mit einem micro-framework ala bottle zu kombinieren. Damit kannst du uU sogar auf den Apache komplett verzichten, wenn das ganze nicht auf Port 80 laufen *muss*
)Chris(
User
Beiträge: 3
Registriert: Donnerstag 9. August 2012, 12:24

Auf .cgi bin ich über ein Buch der Programmiersprache Python gestoßen, aber wen es veraltet und eher nicht geegnet ist, würde ich mich auch umorientieren.
Ich suche eine möglich eine Tabelle aus einer OracleDB über einen Webserver anzuzeigen und sich zu aktualiesieren, damit immer die aktuellen Werte sichtbar sind.
Kann ich diese ganze Angelegenheit dann über z.B. Django lösen?

Also der o.g. Code änder nichts am Sachverhalt, soweit mir aufgefallen ist.
Er blockt mir immernoch meinen import ab.

Danke für die rasche Antwort.
deets

Er sollte auch nix *aendern* an deinem Sachverhalt, er sollte dir helfen, die Probleme mit den Umgebungsvariablen ausfindig zu machen, da es ja offensichtlich eine Aenderung zwischen dem CGI und dem standalone skript gibt.

Und ja, du kannst fuer sowas auch Django nehmen, das ist aber wahrscheinlich ein bisschen overkill. bottle zB ist eine einzige Python-Datei, die musst du nur danebenlegen & inkludieren. Damit kannst du dann zB das mod_wsgi des Apache benutzen, oder wie gesagt, wenn's nicht Port 80 sein muss, auch einfach standalone.
)Chris(
User
Beiträge: 3
Registriert: Donnerstag 9. August 2012, 12:24

Ich habe mir nun eine kleine Datei in bottle gebaut und diese funktioniert (War echt einfach kannte bottle vorher nicht :-))
Nun würde ich das ganze gerne über mod_wsgi lösen, da ich auch über andere Rechner drauf zugreifen muss.

Gibts nun eine Möglichkeit auf die OracleDB zuzugreifen? Muss hierzu was bestimmtes importiert werden?
deets

das sollte genauso gehen wie vorher. unter Umstaenden macht es dieselben Probleme wie vorher, weil wie schon mehrfach erwaehnt: ORACLE und das Environment ist ne kitzelige Sache. Bottle zu benutzen alleine macht da keinen Unterschied, das macht nur web-programmierung schoener.
Antworten