2015/03/11

perlbrew/plenv 時代の Plack アプリでモジュールパスとか見るやつ

perlbrew とか plenv 環境で Plack アプリを開発・運用していて、なんか @INC おかしいぜとか system perl 見ちゃってねーかおい、みたいな場面で便利な Plack::Middleware::ModuleInfo 書きました。

Plack::Middleware::ModuleInfo

use Plack::Builder;

builder {
    enable 'ModuleInfo',
        allow => ['127.0.0.1'],
        path  => '/module_info';
    $app;
};

path で指定したエンドポイントにクエリでモジュール名(「::」はハイフンにして)渡すと、もりっと情報が返ってきます。

% curl http://server:port/module_info?Some-Module
---
PID: 28268
lib:
  - /home/user/perlbrew/perls/perl-5.18/lib/site_perl/5.18.4/x86_64-linux
  - /home/user/perlbrew/perls/perl-5.18/lib/site_perl/5.18.4
  - /home/user/perlbrew/perls/perl-5.18/lib/5.18.4/x86_64-linux
  - /home/user/perlbrew/perls/perl-5.18/lib/5.18.4
mod:
  file: /home/user/perlbrew/perls/perl-5.18/lib/5.18.4/Some/Module.pm
  name: Some::Module
  version: 0.01

Debug 関連で、libパスとか読んでるモジュール全部べろっと吐くやつとかあると思うのですが、プロダクションに投入できることを想定して書きました。

なお、allow / path あたりのつくりは Plack::Middleware::ServerStatus::Lite から頂きました。ありがとうございます。

うぇーい。

サイト内検索