tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【Mojolicious】plackupからのpsgiでmojoliciousアプリの静的ファイルの場所を変更したい - Plack::Middleware::Static

はじめに

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'; として他のアプリと共用するなんてこともできます。

まとめ

PSGI/Plackいまさらながらに便利!