はじめに
mojoliciousアプリをちょこちょこ触っているのですがアプリケーションサーバはPSGI/Plackで起動しています。
本番サーバだったらフロントにいるapacheやnginxのwebサーバ側の
設定で静的ファイルを配信してしまえば良いですよね。
macローカルな開発環境のときはnginxなど使ってない場合も多いですが
同様に静的ファイルはリバプロ的にアプリケーションサーバで捌かないようにしたいものです。
そんなときのメモ。
やりかた
やりかたは簡単です。
psgiのbuilderでPlack::Middleware::Staticを使って静的ファイルを制御します。
こんな感じです。
#!/usr/bin/env perl use strict; use warnings; use lib 'lib'; use Mojo::Server::PSGI; use Plack::Builder; use Hoge::Web; my $psgi = Mojo::Server::PSGI->new( app => Hoge::Web->new ); my $app = $psgi->to_psgi_app; builder { # for local enable "Plack::Middleware::Static", path => qr{^.*(\.jpg|\.jpeg|\.png|\.gif)}, root => 'public'; enable "Plack::Middleware::Static", path => qr{^.*.css}, root => 'public'; enable "Plack::Middleware::Static", path => qr{^.*.js}, root => 'public'; enable "Plack::Middleware::Static", path => qr{^.*.woff}, root => 'public'; $app; };
mojoliciousは
ちなみに
ちなみに root => 'public'
としているので
当然mojoliciousアプリhomeのpath_to_app/public
を参照するのですが、
root指定ができるので静的ファイルのrootを他の場所にすることもできます。
例えば、アプリが複数ある環境であれば、
root => '../other-app/public';
として他のアプリと共用するなんてこともできます。