Сценарий Perl CGI возвращает разные результаты в зависимости от запуска - PullRequest
3 голосов
/ 03 июля 2010

У меня есть Perl CGI-скрипт, который генерирует другой HTML, очевидно, в случайном порядке.Ни один из входов не изменяется.Например, я буду запускать wget дважды и получу два разных результата.CGI поддерживается базой данных разработки, которая тоже не меняется.

У меня есть оператор отладки, который сообщает мне, что такое же количество элементов возвращается из БД в сценарий.

Честно говоря, я озадачен.Логика, БД и входы не меняются, но вывод меняется.

http-сервер apache2 в Ubuntu 10.04.Версия Perl - это Perl 5.10.

edit: всякий раз, когда я запускаю его из командной строки на сервере, вывод корректен.

edit2: некоторые из неудачных прогонов кажутся предыдущими версиямисценарий.Я не думаю Apache кэширует CGI, но кажется, что он может получать устаревшие версии кэша ....

Ответы [ 2 ]

3 голосов
/ 03 июля 2010

Ваш сценарий CGI выполняется с использованием стандартного API CGI Apache или вы запускаете его под mod_perl, используя уровень эмуляции CGI Apache :: Registry (или ModPerl :: Registry в Apache2)?

Я виделэффект похож на тот, который вы описали, и это результат работы эмуляции CGI в mod_perl.Подробности обсуждаются здесь .

Один из обходных путей - взять любые «глобальные» переменные, объявленные в начале скрипта, с помощью «my» и заменить ключевое слово «my» на «our»..

Конечно, ваша проблема может быть чем-то совершенно другим - очень трудно сказать без дополнительной информации.

0 голосов
/ 03 июля 2010

Кэширование: Apache, вероятно, не кеширует, но ваш браузер может быть.Отключите кеширование (установите кеш браузера в 0MB).

Командная строка: если ваши выходные данные отличаются от веб-страницы при выполнении сценария CLI, то, похоже, вам не хватает информации заголовка или тегов HTMLне завершены или сломаны.Например, вам нужен оператор Content-Type с двумя символами новой строки после.

Если он работает на CLI, но теперь через CGI на веб-сервере, это должен быть ваш код, отсутствующий модуль в Apache или что-то в этом роде.

...