$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

perlアプリケーションをVirtualHost環境で使うときに必要な設定

 perlアプリケーションをVirtualHost環境で使うときに、ちょっと注意しないといけない点があったのでメモ。

Apacheの設定

 VirtualHost環境で使うときには、それぞれの環境ごとで異なる@INCや環境変数を用いなければなりません。そのためにApacheの設定で以下のような設定をVirtualHost内に書いておく必要が有ります。

PerlOptions +Parent
PerlSwitches -I/var/www/Sample/current/lib

設定の例は以下。

<VirtualHost *:80>
    ServerName sample.saficion.com
    DocumentRoot /var/www/Sample/current/public
    ErrorLog /var/www/Sample/shared/log/error.log
    CustomLog /var/www/Sample/shared/log/access.log common

    PerlOptions +Parent
    PerlSwitches -I/var/www/Sample/current/lib

    Alias /css/     "/var/www/Sample/current/statics/css/"
    Alias /images/  "/var/www/Sample/current/statics/images/"
    Alias /js/      "/var/www/Sample/current/statics/js/"
    <Perl>
        $ENV{PERL5LIB} = '/var/www/Sample/current/lib';
        $ENV{PLACK_ENV} = 'production';
        $ENV{MOJO_HOME} = '/var/www/Sample/current';
        use Plack::Handler::Apache2;
        Plack::Handler::Apache2->preload("/var/www/Sample/current/script/Sample");
    </Perl>

    <Location />
        SetHandler perl-script
        PerlHandler Plack::Handler::Apache2
        PerlSetVar psgi_app /var/www/Sample/current/script/Sample
    </Location>
    <LocationMatch "/(css|images|js|photos)/">
        SetHandler None
    </LocationMatch>
</VirtualHost>

最後に

 今回やってみて、PerlOptions +Parentを付け加えるとApacheの動作がどういうふうになるのかという部分がまだ理解できませんでした。もし分かる人が入れば教えていただきたいです。