Как получить ошибки сценария Perl в журнале ошибок nginx (Nginx с FCGIwrap)
Я только что установил fcgiwrap и spawn-fcgi, чтобы иметь возможность использовать сценарии perl в nginx. Я добавил что-то вроде этого в конфигурации моего сайта:
location ~ \.pl$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi_params;
fastcgi_index index.pl;
}
Это работает, но браузер показывает следующее сообщение, если в коде perl есть ошибка:
An error occurred while reading CGI reply (no response received)
И я не могу найти ошибки perl в логах nginx. "perl -c" в командной строке помогает, если есть ошибки компиляции perl, но это не помогает мне решать ошибки времени выполнения.
Как я могу сказать perl или fcgiwrap сохранять ошибки в журнале ошибок nginx или каком-либо другом файле журнала?
2 ответа
Существует множество полезных инструментов для сбора ошибок времени выполнения веб-приложений Perl и их отображения. Эти средства отладки могут быть отключены в производстве различными способами. Они в основном "оценивают" основную часть кода, что позволяет им обрабатывать большинство ошибок. Некоторые примеры:
- Plack:: Middleware:: Debug, для любого приложения PSGI
- CGI:: Приложение:: Плагин::DebugScreen для CGI:: Проекты приложений
- Catalyst:: Plugin:: StackTrace, вариант с Catalyst.
- CGI:: Carp имеет 'fatalsToBrowser' для более старого кода или простых случаев.
Возможно, это потому, что у вашего nginx нет прав доступа к файлу "CGI.pm".
Посмотри это:
[root@mars www]# sudo -u nginx ./foo.cgi
Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./foo.cgi line 2.
BEGIN failed--compilation aborted at ./foo.cgi line 2.
[root@mars www]# ./foo.cgi
Status: -charset
Set-Cookie: utf-8
Date: Fri, 29 Sep 2017 02:49:38 GMT
Content-Type: text/html; charset=ISO-8859-1
本文最后更新时间:20170929 10:35:29
[root@mars www]#