2017-06-20 1 views
-2

Ich versuche, eine Perl-Legacy-Software auf Amazon AWS-Server zu portieren, aber ich laufe auf Probleme laufen, wenn alle Komponenten, die ich brauche, arbeiten.Perl-CPAN-Pg-Modul funktioniert auf Amazon AWS-Server

Zurzeit habe ich Perl (Version 5.16.3) und PostgreSQL (9.2.18) als meine Datenbank ohne Probleme laufen und laufen. Sie laufen beide getrennt voneinander, aber ich kann sie einfach nicht zusammenarbeiten lassen.

Diese Legacy-Software verwendet Pg Bibliothek (ich beziehe mich nicht auf DBD::Pg, nur Pg). Ich kann jedoch kein Skript ausführen, das auf diese bestimmte Bibliothek verweist. Ich erhalte die folgende Fehlermeldung:

Can't locate loadable object for module Pg in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 /var/www/cgi-bin) at /var/www/cgi-bin/teste.pl line 8.

Nach einigen Recherchen, verstehe ich, dass ich eine Abhängigkeit irgendwie fehlt bin, dass Pg erfordert ordnungsgemäß funktioniert. Ich habe das Pg.pm-Skript geöffnet, um zu überprüfen, was es verwendet, und habe versucht, diese auch über CPAN zu importieren.

ich es geschafft Exporter und Carp erfolgreich durch cpan zu importieren, aber DynaLoader einfach nicht installieren - anscheinend es kompiliert werden muss ??

Was muss ich tun, um Pg richtig zu installieren?

+0

Sie benötigen wahrscheinlich die Header-Dateien der Bibliothek libpg, um die XS-Komponenten zu kompilieren. – choroba

+0

@ Sinar-Ünür ganz ehrlich, ich habe nur die Befehlszeile ausgeführt, um Perl zu installieren. Ich hatte keine Ahnung, dass DynaLoader schon da war, oder ich hätte nicht versucht, es wieder zu installieren. –

+0

Mein Gott, wie kann ich das verpasst haben ?? Mein schlechtes @ SinanÜnür. BTW, ich habe bestätigt, dass DynaLoader bereits installiert wurde, und das war die Ursache für den Fehler, den ich bekam - es war nichts anderes zu installieren/zu aktualisieren. –

Antwort

0

Ich habe nie Pg verwendet, also versuchen wir es mit meiner ArchLinux-Installation.

$ curl -O https://cpan.metacpan.org/authors/id/M/ME/MERGL/pgsql_perl5-1.9.0.tar.gz 
$ tar xvf pgsql_perl5-1.9.0.tar.gz 
$ cd pgsql_perl5-1.9.0 
$ perl Makefile.PL 
$ perl Makefile.PL 
Configuring Pg 
Remember to actually read the README file ! 
please set environment variables POSTGRES_INCLUDE and POSTGRES_LIB 

Also, wenn Sie Pg installiert, musste man diese Variablen festgelegt haben. Am einfachsten wäre es, das gewählte Distributionspaket für diese Bibliotheken zu installieren. Auf ArchLinux installiert der folgende Befehl sie für mich:

$ sudo pacman -S postgresql-libs 

Dann:

$ POSTGRES_INCLUDE=/usr/include POSTGRES_LIB=/usr/lib perl Makefile.PL 
Configuring Pg 
Remember to actually read the README file ! 
OS: linux 
Generating a Unix-style Makefile 
Writing Makefile for Pg 
Writing MYMETA.yml and MYMETA.json 

Die Build funktioniert, aber ich kann nicht testen, weil ich keine Postgresql Instanz zu verbinden. Dies funktioniert jedoch:

$ perl -I blib/lib -I blib/arch -e 'use Pg; print "ok\n"' 
ok 

Beachten Sie die -I Schalter oben wäre nicht nötig gewesen, hätte ich entschieden, dieses Modul zu installieren, die vor zuletzt aktualisiert 17 Jahren.

+1

Ihre Lösung war nicht perfekt, aber zeigte mir den richtigen Weg. Erstens bin ich mir nicht sicher, ob die Variablen POSTGRES_INCLUDE und POSTGRES_LIB beim ersten Import des Skripts nicht richtig gesetzt wurden, aber als ich es wieder mit Ihren Parametern gemacht habe, funktionierte es einwandfrei. Der Fehler trat jedoch immer noch auf, diesmal aufgrund einiger fehlender Postgres-Abhängigkeiten (insbesondere libpq-fe.h) und weil GCC nicht installiert war. Nach dem Importieren der fehlenden .h und dem Installieren von GCC war der Import erfolgreich. –