2016-08-18 3 views
1

Я использую установку Apache и mod_perl по умолчанию для Ubuntu 16.04.1 LTS, я также воспроизвел это с помощью JSON :: XS по умолчанию и я обновил последнее из CPAN JSON-XS-3,02.JSON :: XS под mod_perl не работает с запросами POST

Код ниже работает во всех случаях, если я не использую mod_perl.

Сценарий и html ниже работают при использовании perl через mod_cgi с запросами POST и GET.

Если я использую mod_perl, и я использую POST (как в предоставленном html), он терпит неудачу, «Hello» не печатает, и я получаю следующую ошибку в файле журнала Apache.

Использование: JSON :: XS :: new (класс).

Если я передаю один и тот же параметр (ы) с помощью метода 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 Так что это был довольно дикий гусь погоня, анализируя основные апач отвалов и стеки, исправления ошибок, которые на самом деле не были ... Короче говоря.

Я пытался добавить включаемый каталог в мой Perl, используя

PerlSwitches -I/USR/местные/Библиотека/site_perl/my_new_directory

Как часть того, что я добавил

PerlOptions + Parent, чтобы я получил новый интерпретатор для каждого виртуального хоста, поэтому мой -I был эффективен только для одного виртуального хоста за раз.

Я добавил эти флаги, прежде чем включил mod_perl, поэтому, когда я включил mod_perl, он просто не работал.

Удаление PerlOptions + Parent все началось, как и следовало ожидать.

В качестве побочного примечания, оно появляется + Родитель делает вещи неуловимыми в жанре.

+0

Дополнительная информация об этом. Чтобы использовать + Parent, вы должны использовать mpm_worker mod, который запускает многопоточность Apache. При использовании mpm_worker работал + Parent, но потом я получил случайные зависания при запросах, когда сервер начал загружать (не так много нагрузки, например, 10 или 20 одновременных подключений). В результате решения, с которым я столкнулся, выполняется несколько экземпляров Apache с mpm_prefork, затем добавив мои PerlSwitches -I в глобальный apache2.conf – Severun

Смежные вопросы