一年一度的 advent 集合中,除了 perl 的部分,还有 sysadmin 的也很吸引我等运维的眼球。不过 sysadmin 的一直是发表在blogspot 上,光荣的被 GFW 认证了。虽然说翻墙应该是这年头越来越普及的技能,但是能提供免墙的办法,想来那真真是极好的。

这里提供一个私以为很不错的办法。因为我很开心的发现 sysadvent 有托管在 github 上。

    sudo apt-get install git
    git clone git://github.com/jordansissel/sysadvent.git
    sudo wget http://xrl.us/cpanm --no-check-certificate -O /sbin/cpanm
    sudo chmod +x /sbin/cpanm
    cpanm Plack DocLife

好了,准备工作完毕。然后在 sysadvent 目录下创建 app.psgi 文件如下:

    use Plack::Builder;
    use Plack::App::Directory;
    use DocLife::Markdown;
    my $html_app = DocLife::Markdown->new(
        root => '.',
        base_url => '/html/',
        suffix => '.html',
    );
    my $md_app = DocLife::Markdown->new(
        root => '.',
        suffix => '.md',
        base_url => '/md/'
    );
    my $dir_app = Plack::App::Directory->new({
        root => '.',
    });
    builder {
        mount '/md' => $md_app;
        mount '/html' => $html_app;
        mount '/' => builder {
            enable "Plack::Middleware::SimpleContentFilter",
            filter => sub {
                s#(/\d{4}/\d{2}/\S+\.md)#/md\1#;
                s#(/\d{4}/\d{2}/\S+\.html)#/html\1#;
            };
            $dir_app
        };
    };

Plack::App::Directory 模块是 Plack 自带的一个静态目录自动索引发布模块。不过他会把 markdown 当成 “text/plain” 发布,不好看。所以这里引入了另一个 DocLife 模块。他可以自动把 markdown 和 pod 格式的文档美化转换成 html 格式。本来 DocLife 本身也提供目录索引功能,不过他的问题是他不考虑 MIME 问题,会把 png 等图片也以 “text/plain” 发布。所以我们用 Plack::App::URLMap 把两个模块挂在到一起,然后用 Plack::Middleware::SimpleContentFilter 过滤内容,替换原本的目录链接成针对性的目录。

大功告成!运行命令开始享受世界级运维们的分享吧:

    plackup &
    open localhost:5000
注:另外有个 Plack::App::Directory::Markdown 模块,不过他写死了只处理 md,连 html 都被 next。比较好玩的是这个模块自己把 bootstrap.css js 给放到 __DATA__ 块里一起分发了,页面倒是更好看一点。