2016-08-18 71 views
1

我在Ubuntu 16.04.1 LTS上使用Apache和mod_perl的默認安裝,我也用默認的JSON :: XS轉載了這個,我更新到了最新的CPAN JSON-XS-3.02。mod_perl下的JSON :: XS失敗,POST請求

下面的代碼適用於所有情況下,如果我不使用mod_perl。

下面的腳本和html通過mod_cgi同時使用POST和GET請求來使用perl時工作。

如果不過我使用的是mod_perl並且使用POST(如在提供的html中),它會失敗,「Hello」不會打印,並且在我的apache日誌文件中出現以下錯誤。

用法:JSON :: XS :: new(klass)。

如果我通過GET方法傳遞相同的參數,那麼腳本工作正常。

test2.pl

#!/usr/bin/perl 
use strict; 
use warnings; 
use CGI; 
use JSON::XS; 

my $q = new CGI(); 
print $q->header(-type => 'text/plain'); 
my $action = $q->param('a'); 
my $json_str = '{"foo":"bar"}'; 
my $pscalar = JSON::XS->new->utf8->decode($json_str); 
print "Hello"; 
exit 1; 

HTML調用以上(在服務器上名爲test2.pl)

<html> 
<body> 
<form action="test2.pl" method="POST"> 
<input type="text" name="a"/> 
<button type="submit"> 
</form> 
</body> 
</html> 
+0

沒有,做同樣的事情。 – Severun

回答

0

OK所以這是一個相當徒勞無益的,分析Apache的核心轉儲和堆棧痕跡,修復那些並不存在的錯誤......長話短說。

我試圖用

PerlSwitches -I在/ usr/local/lib目錄/ SITE_PERL/my_new_directory

由於這部分我加

PerlOptions添加一個包括目錄到我的Perl + Parent,這樣我就可以爲每個虛擬主機獲得一個新的解釋器,所以我的-I一次只對一個虛擬主機有效。

我在啓用mod_perl之前添加了這些標誌,所以當我啓用mod_perl時,它從未工作。

通過刪除PerlOptions +父事情開始按預期工作。

作爲一個方面說明,它出現+父母使東西在一般形式。

+0

關於此的一些更多信息。爲了使用+ Parent,你必須使用運行Apache多線程的mpm_worker mod。當使用mpm_worker時,+ Parent工作,但隨後服務器開始加載時請求隨機掛起(沒有太多負載,例如10或20個同時連接)。我最終使用的解決方案是運行多個Apache實例mpm_prefork模塊,然後將我的PerlSwitches -I添加到全局apache2.conf – Severun