2013-11-27 4 views
0

많은 질문이 있어도 같은 질문을 물어 봅니다. 하지만 여기 오류는 Perl 대신 Apache에서 발생합니다. 나는 맥 OS X 매버릭스의 클라이언트에 대한 XML 응답을 만들려고하고 다음과 같이 펄 스크립트를 작성했습니다 :@INC apache mac에서 Geo/Gpx.pm을 찾을 수 없습니다.

Gpx.pm의 실제 경로를 찾을 수있는 아파치를 들어
#!/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); 

, 내가 사용하고 있습니다 'lib 사용'은 파일의 실제 경로를 보여줍니다. 이 스크립트는 명령 줄에서 완벽하게 작동하고 있지만 , 내 아파치 서버는 다음과 같은 오류 던지고있다 :

[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를하고 매버릭스는 5.16 사전 설치된 펄 가지고 웹을 통해 검색을 발견했다. 그래서 아파치가 그것을 사용하고있을 펄은 macport 설치된 라이브러리를 사용하고 있습니다. 위에서 게시 한 Apache error_log 파일에서 언급 한 경로를 확인하는 과정에서 Geo Folder에 설치된 라이브러리 중 하나에서 Gpx.pm을 복사했지만 아직 해결되지 않았습니다. 내가 이것 때문에 전진 할 수없는 나처럼

/opt/local/bin/cpan 

이 친절하게이 문제를 해결주고있다 'CPAN'결과

/opt/local/bin/perl 

와 '펄있는'실행에 . 그리고 나는 아파치에 익숙하지 않다. 이 파일을 찾기 위해 각 경로에 대한 전체 모듈 이름 (/으로 :: 교체)를 추가합니다으로

답변

1

/opt/local/lib/perl5/site_perl/5.16.1/Geo/opt/local/lib/perl5/site_perl/5.16.1/을해야합니다.

+0

고맙습니다. 이것은 도움이되었습니다. – 001011Idreamincode

+0

제발 좀 더 대답 해주세요. 백그라운드에서 응답을 보내는 대신 내 브라우저가 전체 XML 파일을 인쇄합니다. 내가 어디에서 잘못하고 있니? – 001011Idreamincode

+0

@ 001011Idreamincode header() 호출에 다음을 추가하십시오 :'-Content_Disposition => "attachment; filename = download.gpx"'. 그리고'text/gpx' 대신에'application/xml'을 사용하십시오. –