1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Perl Problem bei Popfile Installation

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von Geigaman, 30.07.07.

  1. Geigaman

    Geigaman Macoun

    Dabei seit:
    17.03.06
    Beiträge:
    116
    Hallo ihr!

    Ich hoffe ich bekomme von euch etwas Hilfe.

    Ich wollte POPfile installieren (soll sehr gut sein). POPfile ansich ist aber nur eine Sammlung von Perl Scripts die mit eine SQLite DB zusammenarbeiten.

    Prinzipiell habe ich alles nach dieser Anleitung gemacht, bis zu dem Punkt wo ich in der CPAN shell
    Code:
    install DBD::SQLite2
    machen musste. Das ging schlug ein Test immer fehl.
    Kurz Google befragt --> keine echte Lösung also
    Code:
    force install DBD::SQLite2
    :-D

    Danach hat es dann auch installiert, aber wenn ich nur
    Code:
    perl popfile.pl
    ausführe kommt folgendes:
    Code:
    ibook:/Library/POPfile username$ perl popfile.pl 
    
    POPFile Engine loading
    
        Loading... 
             {core: config history logger mq} 
             {classifier: bayes wordmangle} 
             {interface: html xmlrpc} 
             {proxy: nntp pop3 smtp} 
             {services: imap} 
    
    POPFile Engine v0.22.5 starting
    
        Initializing... 
             {core: config history logger mq} 
             {classifier: bayes wordmangle} 
             {interface: html xmlrpc} 
             {proxy: nntp pop3 smtp} 
             {services: imap} 
    
        Starting...     
             {core: config history logger mq} 
    DBI connect('dbname=./popfile.db','',...) failed: unable to open database: ./popfile.db(1) at dbdimp.c line 57 at /Classifier/Bayes.pm line 735
    Use of uninitialized value in concatenation (.) or string at /Classifier/Bayes.pm line 739.
    Use of uninitialized value in string gt at /Classifier/Bayes.pm line 745.
    Can't call method "do" on unblessed reference at /Classifier/Bayes.pm line 1028, <SCHEMA> line 86.
             {classifier:ibook:/Library/POPfile username$ 
    Ich hab keine Ahnung, ob er wegen der Datenbank, die nicht geöffnet werden kann aussteigt. Ich weiß, das wäre auch nicht so gut, aber es sieht garnicht direkt nach dem Datenbankfehler aus, oder doch?
    Wie kann ich dem Script oder Perl sagen welche Datenbank er benutzen soll?

    Danke schonmal im Voraus
    Wenn das Programm dann mal funktionieren sollte, werde ich ein Review schreiben, das Ding soll echt gut sein.
     
  2. Cyrics

    Cyrics Neuer Berner Rosenapfel

    Dabei seit:
    01.04.05
    Beiträge:
    1.975
    ich hab mich persönlich noch nicht wirklich mit Datenbanken in Verbindung mit Perl auseinander gesetzt. Finde das Thema aber hochspannend und würde mich freuen, wenn du ein Review dazu schreiben könntest.

    Also ich kann die nur aus der Sicht meiner begrenzten Perl-Kenntnisse helfen.
    Also das Ding scheint ja normal zu starten, zumindest versucht er einiges zu initialisieren und dann ein connect zu einer Datenbank aufzubauen.

    Code:
    Starting...     
             {core: config history logger mq} 
    DBI connect('dbname=./popfile.db','',...) failed: unable to open database: ./popfile.db(1) at dbdimp.c line 57 at /Classifier/Bayes.pm line 735
    
    Also hier wird anscheinend durch "eval" versucht eine Verbindung aufzubauen. Und zwar zu der Datenbank, die in dem aktuellen Verzeichnis liegt und popfile.db heisst.
    Genaueres sollte dazu in dbdimp.c in der Zeile 57 stehen.
    Die ausführliche Fehlermeldung hast du sozusagen selbst schon vor dir liegen. Wenn diese popfile.db nicht existiert, wird es in den folgenden Schritten gleich unangenehm, weil nun mit etwas gearbeitet wird, was nicht existiert.
    Code:
    Use of uninitialized value in concatenation (.) or string at /Classifier/Bayes.pm line 739.
    Use of uninitialized value in string gt at /Classifier/Bayes.pm line 745.
    
    Hier kommen nämlich erst die wirklichen Probleme. Der nicht definierte Filehandler, der nun auf eine Datei lesen möchte, die nicht existiert, wirft verschiedene Fehler in dem Perl Modul Bayes.

    Code:
    Can't call method "do" on unblessed reference at /Classifier/Bayes.pm line 1028, <SCHEMA> line 86.
             {classifier:ibook:/Library/POPfile username$
    
    Und dann kommt der endgültige Abbruch, da kein heilvolles Eintreten in die do-Schleife möglich war. Anscheinend ist der Filehandler, welcher auf die "Datenbank" zugreift <SCHEMA>. Naja, der ist wie gesagt nicht definiert und fördert die Fehler an den Tag.

    Du könntest dir ja mal den Quelltext anschauen und gucken inwiefern du den Filehandler klar machen kannst auf welche Datenbank er zugreifen soll, oder du übergibst dem einfach mal als Parameter hinter den Aufruf den Pfad zur Datenbank.

    es gibt leider zig Möglichkeiten auf eine Datenbank zuzugreifen mit Perl, daher kann ich dir nicht genau sagen nach was du auschau halten solltest...
    für mich klingt es nach der Möglichkeit einen normalen Bareword Filehandler zu öffnen:
    Code:
    open SCHEMA,'<',"$SQLPLUS .... ";
    
    PS: tut mir leid für die späte Wortmeldung... hab den Thread leider erst jetzt entdeckt.
     

Diese Seite empfehlen