1. Home
  2. Archive
  3. HTMLとかの静的ファイル確認するだけのサーバー

HTMLとかの静的ファイル確認するだけのサーバー

HTMLとかCSSとかの静的ファイルを渡されて確認してほしいって言われたけど全部絶対パスで書かれてて確認できなかったので、そういうの見るだけのサーバー書いてみた。といってもPlack::Middleware::Staticでまるっと返してるだけだけれども。

#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Long;
use Pod::Usage;
use File::Which qw/which/;
use File::Temp;
use Path::Class qw/dir/;

my $root = '.';
my $port = 5050;
my $help;
GetOptions (
    'root|r=s' => \$root,
    'port|p=i' => \$port,
    'help|h' => \$help,
);

pod2usage() if $help;

my $root_dir = dir($root)->absolute->stringify;
print "document root: $root_dir\n";

my $app_psgi = <<'...';
use Plack::Middleware::Static;

sub {
    $env = shift;

    if ($env->{PATH_INFO} =~ m!/$!) {
        $env->{PATH_INFO} .= 'index.html';
    }
    $app = Plack::Middleware::Static->new({
        path => sub { 1 },
        root => '%s'
    });
    $app->call($env);
};
...

my $fh = File::Temp->new;
print $fh sprintf($app_psgi, $root_dir);

my $plackup = which('plackup') or die 'require plackup command';
system($plackup, '-a', $fh->filename, '-p', $port, '-s', 'Standalone::Prefork');

__END__

=head1 SYNOPSIS

$ static_server [-p port] [-r root] [-h]

これにパス通せば

$ static_server

でカレントディレクトリをドキュメントルートにしたサーバーが立ち上がる。ドキュメントルートとポート番号は設定できるようにしてある。割と便利かも。

追記:と思ったらこのワンライナーでいけるぽ。

plackup -p 1978 -s Standalone::Prefork -e 'use Plack::App::Directory; Plack::App::Directory->new({root=>"."})->to_app'

Plack::App::Directory が便利だった件 - TokuLog 改メ Perlを極めて起業する日記

コメントフォーム

スパムがひどいので一時的にコメントフォーム閉じます。ゴメンナサイ。