2017-06-20 72 views
-2

我試圖將一個Perl遺留軟件移植到Amazon的AWS服務器上,但是當試圖使我需要的所有組件工作時,我總是遇到問題。Perl CPAN的Pg模塊在Amazon的AWS服務器上工作

目前,我有Perl啓動和運行(版本5.16.3)和PostgreSQL(9.2.18)作爲我的數據庫沒有問題。他們都單獨運行,但我根本無法讓他們一起工作。

此舊版軟件使用Pg庫(我不是指DBD::Pg,只是Pg)。但是,我無法運行引用特定庫的腳本。我得到以下錯誤:

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.

經過一番研究,我明白,我莫名其妙地失蹤的依賴是Pg要求才能正常工作。我打開Pg.pm腳本來檢查它使用什麼,並嘗試通過CPAN導入它們。

我設法通過cpan導入ExporterCarp成功,但DynaLoader根本不會安裝 - 顯然它需要編譯?

我需要怎麼做才能正確安裝Pg

+0

您可能需要libpg庫的頭文件來編譯XS組件。 – choroba

+0

@ Sinar-Ünür完全誠實,我只是運行命令行來安裝Perl。我不知道DynaLoader已經在那裏,或者我不會試圖再次安裝它。 –

+0

我的上帝,我怎麼能錯過?我的壞@SananÜnür。 順便說一句,我確認DynaLoader已經安裝,這是我得到的錯誤的原因 - 沒有什麼可以安裝/更新。 –

回答

0

我從來沒有用過Pg,所以我們來試試我的ArchLinux安裝。

$ 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 

所以,如果你安裝Pg,你必須設置這些變量。最簡單的方法是爲這些庫安裝您選擇的發行版軟件包。在ArchLinux的,下面的命令安裝這些對我來說:

$ sudo pacman -S postgresql-libs 

然後:

$ 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 

構建工程,但我無法測試,因爲我沒有一個PostgreSQL實例連接。然而,這個工程:

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

注意-I交換機上面不會有必要了我選擇安裝這個模塊,最後更新17年前。

+1

你的解決方案並不完美,但指出了我的正確道路。首先,我不確定在第一次導入腳本時POSTGRES_INCLUDE和POSTGRES_LIB變量是否設置不正確,但是當我再次使用參數時,它工作得很好。 但是,錯誤仍然發生,這次是因爲缺少一些Postgres依賴項(特別是libpq-fe.h),並且因爲沒有安裝GCC。導入缺少.h並安裝GCC後,導入成功。 –