Моя установка выглядит следующим образом: у меня есть один веб-сервер Apache2, на котором запущены разные виртуальные хосты, один виртуальный хост предназначен для производственного веб-сайта, а другой - для промежуточной системы / системы предварительного просмотра. Оба хоста имеют разные DocumentRoots, а также разные (Perl) папки CGI. Используемые модули для каждого из этих хостов должны находиться в разных каталогах, поэтому я сделал следующее:
<VirtualHost...>
ServerName production
SetEnv PERL5LIB /home/production/modules
</VirtualHost>
<VirtualHost...>
ServerName staging
SetEnv PERL5LIB /home/staging/modules
</VirtualHost>
Однако я только что заметил, что в моих сценариях Perl CGI оба пути заполняются в моем @INC, поэтому я не могу отделить промежуточные модули от производственных модулей, например директива SetEnv не ограничивается одним виртуальным хостом, но, похоже, работает глобально.
Как я могу это решить?
Спасибо! Йонас
<VirtualHost ...>
ServerName dev1
PerlOptions +Parent
PerlSwitches -I/home/dev1/lib/perl
</VirtualHost>
<VirtualHost ...>
ServerName dev2
PerlOptions +Parent
PerlSwitches -I/home/dev2/lib/perl
</VirtualHost>
Я нашел что-то под названием SetEnvIf который можно использовать для установки переменных среды на основе заголовков запроса. например.
SetEnvIf Request_URI "\request-for-staging\" PERL5LIB=/home/staging/modules
Но это может быть слишком тяжело ... так что вы можете попробовать mod_rewriteвариант [E = ...].
Надеюсь, это поможет :)