Не може да се намери Geo/Gpx.pm в @INC apache mac

Въпреки че има много запитвания, които задават един и същи въпрос. Но тук грешката се хвърля от apache вместо от Perl. Опитвам се да създам XML отговор за клиента на Mac OS X Mavericks и съм написал perl скрипта, както следва:

#!/usr/bin/perl -wT                                                                                                                                                                  
use lib '/opt/local/lib/perl5/site_perl/5.16.1/Geo';
use strict;
use CGI;
use Geo::Gpx;

open (FH, "/tmp/temp/file.txt") or print ("Unable to Open File");

my $gpx = Geo::Gpx->new;
my $cgi = CGI->new;
print $cgi->header(-type=>"text/gpx",-status=>"200 OK");

my $lon;
my @arr = <FH>;

foreach(@arr){
my %waypoints;
my $var = $_;
my @lat = split(/\s+/,$var);
#@waypoints=split(/\s+/,$_);                                                                                                                                                     
$waypoints{$lat[0]}=$lat[1];
$waypoints{$lat[2]}=$lat[3];
$gpx->add_waypoint(\%waypoints);
}

my $xml = $gpx->xml;
print $xml;
open FILE, ">/tmp/temp/xmlfile.xml" or die $!;
print FILE $xml;
close (FILE);
close(FH);

За да може apache да намери действителния път на Gpx.pm, използвах 'use lib', за да му покажа истинския път на файла. Въпреки че този скрипт работи перфектно на командния ред, моят apache сървър извежда следната грешка:

[Tue Nov 26 18:34:51 2013] [error] [client 127.0.0.1] Can't locate Geo/Gpx.pm in @INC 
(@INC contains: /opt/local/lib/perl5/site_perl/5.16.1/Geo /Library/Perl/5.16/darwin-thread-multi-2level 
/Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 
/Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 
/System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at /Users/Rachit/Sites/temp.pl line 7.
[Tue Nov 26 18:34:51 2013] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at /Users/Rachit/Sites/temp.pl line 7.

Използвал съм macports и при търсене в мрежата открих, че Mavericks има предварително инсталиран perl 5.16. Така че apache може да използва това, а perl използва инсталираните библиотеки на macport. При проверка на пътищата, споменати от файла apache error_log, както публикувах по-горе, копирах Gpx.pm в една от библиотеките, инсталирани в Geo Folder, но все още не го разрешавам. При изпълнение на 'which perl' Резултатът

/opt/local/bin/perl

И "кой cpan" дава

/opt/local/bin/cpan

Моля, коригирайте този проблем, тъй като не мога да продължа напред поради това. И аз не съм толкова запознат с apache.


person 001011Idreamincode    schedule 27.11.2013    source източник


Отговори (1)


/opt/local/lib/perl5/site_perl/5.16.1/Geo трябва да бъде /opt/local/lib/perl5/site_perl/5.16.1/, тъй като ще добави пълното име на модула (заменяйки :: с /) към всеки път за намиране на файловете.

person Quentin    schedule 27.11.2013
comment
Благодаря много. Това помогна. - person 001011Idreamincode; 27.11.2013
comment
Бихте ли могли да отговорите на още един въпрос. Вместо да изпрати отговора във фонов режим, браузърът ми отпечатва пълния xml файл. Къде греша? - person 001011Idreamincode; 27.11.2013
comment
@001011Idreamincode Добавете следното към извикването на header(): -Content_Disposition => "attachment; filename=download.gpx". И може би използвайте application/xml вместо text/gpx. - person Slaven Rezic; 27.11.2013