2015-02-04 6 views
1
#!C:/perl/bin/perl.exe 
use CGI; 

my $q = CGI->new; 
print $q->header('text/plain'), 
    "Hello ", $q->param('name'); 

#CONVERTED PSGI PAGE 

#!C:/perl/bin/perl.exe 
use CGI::PSGI; 

my $app = sub { 
    my $env = shift; 
    my $q = CGI::PSGI->new($env); 


    return [ 
     $q->psgi_header('text/plain'), 
     [ "Hello ", $q->param('name') ], 
    ]; 
}; 

Я бег этого cgi.pl в сервере Apache как http://localhost/cgi-bin/cgi.plразвертывания CGI для PSGI конвертированы приложения в апаче

, но я не могу иметь возможность запускать преобразованный psgi.pl в сервере Apache его отображение , пожалуйста, помогите Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Обратитесь к администратору сервера по адресу [email protected], чтобы сообщить им о времени возникновения этой ошибки и действиях, которые вы выполнили непосредственно перед этой ошибкой. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера.

+1

'CGI' - это одна спецификация, которая использует Apache и/или другие веб-серверы. 'PSGI' является ** другой ** спецификацией. Вы можете запускать приложения CGI под PSGI-серверами (используя CGI :: PSGI), но вы не можете запускать приложение PSGI как простой CGI-скрипт. Для приложения PSGI вы __dont need__ apache. (если хотите использовать apache, вы можете: 1. запустить приложение PSGI за обратным прокси-сервером или 2.) использовать Plack :: Handler :: Apache2 или такой ... – jm666

+0

«Дополнительная информация об этой ошибке может быть доступна на сервере журнал ошибок "- похоже, это может быть ключом. Что говорит журнал ошибок сервера? –

+0

Я могу запустить его сейчас, используя модуль plack :: runner –

ответ

0

CGI и PSGI - это две разные спецификации того, как взаимодействуют веб-сервер и внешняя программа.

Под CGI веб-сервер ожидает получения текстового вывода из программы, состоящего из заголовков HTTP-ответа, пустой строки и HTML-кода, отображаемого программой.

Модуль CGI реализует эту логику для сервера apache, а если выход из программы не соответствует, apache сообщает об ошибке 500.

Под PSGI веб-сервер ожидает, что программа вернет список трех элементов, состоящий из кода ответа HTTP, заголовков HTTP-ответа и HTML, отображаемых программой.

Итак, вы можете видеть, что программа, соответствующая спецификации PSGI, путала бы mod_cgi.

Поэтому вам необходимо установить модуль apache, который реализует PSGI, или использовать модуль Perl (документы CGI :: PSGI предлагают CGI::Emulate::PSGI), которые будут принимать ваш список PSGI и конвертировать в CGI для вас.