Как мне провести бета-тестирование веб-модулей Perl в Apache / mod_perl на рабочем веб-сервере? - PullRequest
2 голосов
/ 19 марта 2010

У нас есть установка, в которой большая часть кода перед переходом на полную версию развертывается в режиме BETA, то есть работает в полной рабочей среде (с использованием рабочей базы данных - обычно производственных данных и рабочего веб-сервера).Мы называем этот этап бета-тестированием.

Одним из основных требований является то, что продвижение кода бета-версии в производство должно быть простой командой "cp" из бета-версии в производственный каталог - без изменений кода / имени файла.

Для не-веб-кода Perl выполнение бесшовного теста BETA вполне выполнимо ( см. Подробности здесь ):

  • Программы на Perl живут в стандартном месте под рабочим рутом (/usr/code/scripts) с производственными модулями Perl, живущими в одном корне (/usr/code/lib/perl)
  • Код BETA имеет 100% одинаковых путей кода, за исключением корневого бета-версии (/usr/code/beta/)
  • Специальный модуль управляет @INC любого сценария, основанного на том, был ли сценарий вызван из /usr/code/scripts или /usr/code/test/scripts, чтобы включить бета-библиотеки для бета-сценариев.

Эта установка работает нормально, пока нам не потребуется бета-тестирование нашеговеб-Perl-код (установка EmbPerl и Apache / mod_perl).

Зависание следующее: , если и рабочий модуль Perl, и модуль BETA Perl имеют одинаковые имена (например, /usr/code/lib/perl/MyLib1.pmи /usr/code/beta/lib/perl/MyLib1.pm), тогда mod_perl сможет загрузить ОДИН из этих модулей в память - и мы не знаем, какая конкретная веб-страница может повлиять на то, какая версия модуля загружена в настоящее время из-за проблем параллелизма.

Оставляя в стороне очевидное непрограммное решение (получите кровавый веб-сервер BETA), которое по политическим / организационным причинам неосуществимо, есть ли какой-нибудь способ, которым мы можем как-то взломать эту проблему в Perl или mod_perl?

Я поиграл с различными подходами к выгрузке модулей Perl, перечисленных в %INC, но проблема остается в том, что другой пользователь может загрузить бета-страницу в нужный момент (или, скорее, неправильно) и получить бета-модульзагружен, который будет использоваться для моей производственной страницы.

1 Ответ

3 голосов
/ 19 марта 2010

Используя mod_perl 2.0, вы можете использовать PerlOptions + Parent для создания отдельного пула интерпретаторов Perl для каждого vhost. Конечно, это будет стоить вам дополнительной памяти, но это сработает.

...