Похоже, что mod_perl управляет только Интерпретаторы Perl для каждого VHOST, могу ли я каким-либо образом повлиять на то, какой клонированный интерпретатор mod_perl выбирает для обработки запроса? Я прочитал настраиваемые области действия и взглянул на «modperl_interp_select» в источнике, и я мог видеть, что если с запросом уже связан интерпретатор, он выбирается mod_perl.
else if (r) {
if (is_subrequest && (scope == MP_INTERP_SCOPE_REQUEST)) {
[...]
}
else {
p = r->pool;
get_interp(p);
}
Я хотел бы добавить какой-то обработчик, прежде чем mod_perl выберет интерпретатор для обработки запроса, а затем выберет интерпретатор, чтобы назначить его самому запросу, на основе различных критериев, включенных в запрос.
Но мне трудно понять, может ли вообще существовать такой обработчик или все, что касается запроса, уже обрабатывается выбранным интерпретатором mod_perl.
Вдобавок я вижу APR :: Pool-API, но, похоже, он не дает возможности установить некоторые пользовательские данные для текущего объекта пула, что mod_perl читает с помощью «get_interp».
Может ли кто-нибудь помочь мне в этом? Спасибо!
Немного о предыстории: у меня есть структура каталога в cgi-bin, подобная следующей:
cgi-bin
software1
customer1
*.cgi
*.pm
customer2
*.cgi
*.pm
software2
customer1
*.cgi
*.pm
customer2
*.cgi
*.pm
Каждый клиент использует частную копию программного обеспечения, и программное обеспечение использует себя, например программное обеспечение1 клиента1 может взаимодействовать с программным обеспечением2 клиента1, загружая некоторые специальные клиентские библиотеки программного обеспечения2 в свой собственный интерпретатор Perl. Чтобы усложнить ситуацию, программное обеспечение2 может даже иметь общие / общие части программного обеспечения1 с собственной частной установкой с использованием svn: external. Итак, у меня есть много одного и того же программного обеспечения с одинаковыми пакетами Perl в одном VHOST, и я не могу гарантировать, что все эти частные установки всегда имеют один и тот же уровень версии.
Это довольно путаница, но она, как известно, работает по правилам, установленным в том же интерпретаторе Perl.
Но теперь приходит mod_perl, клонирует интерпретаторы по мере необходимости и повторно использует их для запросов в любой подкаталог cgi-bin, который ему нравится, и в этом случае что-то сломается, потому что внезапно интерпретатор уже обработал программное обеспечение1 клиента1 и теперь должен обрабатывать программное обеспечение2 клиента2, которое использует общие пакеты программного обеспечения1, которые уже были загружены интерпретатором Perl раньше и используются из-за% INC вместо частных пакетов программного обеспечения2 и тому подобного ...
Да, есть разные способы справиться с этим, например, VHOST и субдомены, программное обеспечение или клиент или что-то еще, но я хотел бы проверить различные способы сохранения одного VHOST и текущей структуры каталогов, просто используя то, что предоставляет mod_perl или Apache httpd. И одним из способов было бы, если бы я мог сказать mod_perl всегда использовать один и тот же интерпретатор Perl для запросов к одному и тому же каталогу. Таким образом, mod_perl создаст пул интерпретаторов, и я буду отвечать за выбор каждого из них для каждого каталога.
reverse proxy
для определенных URL-адресов (каждый ваш сценарий CGI имеет свой собственный URL-адрес) и будет запускать для каждого сценария собственный сервер на основе Plack (на разных портах ) с помощью CGI :: Emulate :: PSGI или CGI :: PSGI. Короче говоря, каждый CGI-скрипт будет запускать один отдельный сервер Plack (perl) на своем собственном порту в полностью изолированной (но httpd-проксированной) среде. - person jm666   schedule 31.12.2014../cgi-bin
(например, множества скриптов в одном каталоге) вот Plack :: Приложение :: CGIBin. Но, конечно, если вы должны придерживаться apache (и не можете использовать собственный perl-plack / веб-сервер), например starman и / или другие, более простым (?) Способом будет патчить исходники mod_perl и поддерживать исправленную версию. ;) Это была не рекомендация (мало подробностей) - только комментарий. (Я фанат Plack) :) - person jm666   schedule 31.12.2014