Назад | Перейти на главную страницу

Apache2 - настройка PERL5LIB через SetEnv под CGI

Моя установка выглядит следующим образом: у меня есть один веб-сервер 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 = ...].

Надеюсь, это поможет :)