Perl CGI с использованием HTML::Template
Я хотел бы использовать HTML::Template
модуль, но почему-то я не могу настроить его на работу должным образом. Вот очень простой репрезентативный код, на котором я тестирую:
use strict;
use warnings;
use CGI;
use HTML::Template;
my $test = new CGI;
my $tmpl = HTML::Template->new(filename => 'TemplateSimple.html');
$tmpl->param(
title => 'Test',
body => '<p>This is a test</p>',
);
my $out = $test->header(
-type => 'text/html',
-charset => 'utf-8'
);
print $out;
print $tmpl->output;
При вызове страницы я всегда получаю в браузере сообщение об ошибке сервера:
502 - веб-сервер получил неверный ответ, выступая в качестве шлюза или прокси-сервера.
TemplateSimple.html
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title><TMPL_VAR NAME=title></title>
<link rel="SHORTCUT" ICON href="favicon.ico" />
</head>
<body>
<TMPL_VAR NAME=body>
</body>
</html>
Я должен использовать CGI, потому что я хочу обрабатывать пользовательский ввод на веб-странице, но я хотел бы определить базовую структуру HTML в шаблоне, где я могу вставлять сегменты кода по мере необходимости.
редактировать
Я думаю, что это может быть связано с различными конфигами между локальным Perl (запускается из eclipse, который работает нормально) и конфигурацией Perl CGI. Кто-нибудь знает о таком случае?
редактировать
После настройки конфигурации Perl CGI в Eclipse сценарий запускается, как и ожидалось, с локального хоста. Однако проблема при вызове страницы из внешнего источника сохраняется. Поэтому, как предложил DaveCross, ошибка заключается в конфигурации веб-сервера, а не в скрипте Perl.
1 ответ
При инициализации HTML::Template
объект в скрипте Perl
my $tmpl = HTML::Template->new(filename => 'TemplateSimple.html');
Я должен был указать полный путь, а не только имя файла, поэтому
my $tmpl = HTML::Template->new(filename => 'C:/inetpub/wwwroot/Project/TemplateSimple.html');
Это решило мою проблему.
Для кого это может быть интересно, веб-сервис был настроен с IIS 7, очень простым и стандартным способом.