アーカイブ - 3月, 2016



2016年 3月 29

Minillaでモジュールを作る練習として Amon2のロギングにLog::Handlerを使う で書いたコードをモジュール化してみる。

Amon2-Plugin-LogDispatch を参考に(ほぼforkしたもの)をgithubに上げるところまで出来た。

ソースコードは以下。

clicktx/p5-Amon2-Plugin-LogHandler

test全く書いていない。

Amon2アプリで使う

プラグイン読み込んで設定を書く。CPANに公開されていないモジュールだとcartonで管理するのよく分からないから、forkしてモジュール名を変更して使う。

該当コミットは以下。

Merge branch ‘feature/plugin-loghandler’ · clicktx/p5-App-Amozon@0eaa4db

MyApp.pmと同じ階層にリネームしたLogHandler.pmを置いて、

__PACKAGE__->load_plugin('+MyApp::Log');

でプラグインとして読み込んでる。

__PACKAGE__->load_plugin('LogHandler'); で呼び出すには、Amon2/Plugin/ 以下にプラグインファイルがある必要があるから +がつく呼び出し方しているけど、使い方あっているか模索中。

Minillaを使ってみて

とにかく簡単にPerlモジュールが書ける大変便利なツールと実感。素晴らしい。


Filed under: Amon2,perl

Trackback Uri






2016年 3月 28

cpanm Minilla

minil new My::Mod

My-Modディレクトリが作られてその中にモジュールのテンプレートがさくせいされる。

githubにあたらしいリポジトリを作る

  • App::phつかうと便利らしいので入れる。
  • ディレクトリ名でリポジトリが作られる
    • p5-my-mod 等にディレクトリ名を変更しておくと吉
  • 最近のバージョンなら最初から設定(minil.toml)にname=”My-Mod”ってかいてあるっぽい

足りないモジュール入れる

minil releaseする時に不足しているモジュール。cpanmで入れると良い。

  • Version::Next
  • CPAN::Uploader

ライセンスを変更すると Software::License もひつようらしい。

Minilla で Perl モジュールをつくる – Qiita

エラーログ1

$ minil release
Release engineering requires Version::Next, but it is not available. Please install Version::Next using your preferred CPAN client at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/Release/BumpVersion.pm line 16.

Minilla::Error::CommandExit at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/Logger.pm line 56.
Minilla::Logger::errorf(“%s\x{a}”, “Release engineering requires Version::Next, but it is not ava”…) called at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/CLI.pm line 60
Minilla::CLI::ANON(“Release engineering requires Version::Next, but it is not ava”…) called at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Try/Tiny.pm line 115
Try::Tiny::try(CODE(0x7fb06481f840), Try::Tiny::Catch=REF(0x7fb064884db0)) called at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/CLI.pm line 63
Minilla::CLI::run(Minilla::CLI=HASH(0x7fb06481f6f0), “release”) called at /Users/clicktx/.plenv/versions/5.20/bin/minil line 6

エラーログ2

$ minil release
Release engineering requires CPAN::Uploader, but it is not available. Please install CPAN::Uploader using your preferred CPAN client at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/Release/UploadToCPAN.pm line 11.

Minilla::Error::CommandExit at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/Logger.pm line 56.
Minilla::Logger::errorf(“%s\x{a}”, “Release engineering requires CPAN::Uploader, but it is not av”…) called at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/CLI.pm line 60
Minilla::CLI::ANON(“Release engineering requires CPAN::Uploader, but it is not av”…) called at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Try/Tiny.pm line 115
Try::Tiny::try(CODE(0x7ff70980c840), Try::Tiny::Catch=REF(0x7ff7099343b0)) called at /Users/clicktx/.plenv/versions/5.20/lib/perl5/site_perl/5.20.3/Minilla/CLI.pm line 63
Minilla::CLI::run(Minilla::CLI=HASH(0x7ff70980c6f0), “release”) called at /Users/clicktx/.plenv/versions/5.20/bin/minil line 6

CPANにアップロードしない設定にする

minil.toml に設定書けば上のエラーでないかも。

[release]
do_not_upload_to_cpan=true

バージョンを上げる時

  • Changesファイルを編集する。{{$NEXT}}のすぐ下に今回の変更点などを追記。
Revision history for Perl extension My-Mod

{{$NEXT}}
    - second version ←ここに追記する

0.01 2016-03-28T11:07:45Z
    - original version
  • minil release コマンドでバージョン上げる

My/Mod.pmのour $VERSION = "0.01";our $VERSION = "0.02";に自動で変更され、commitされる


Filed under: perl

Trackback Uri






2016年 3月 22

Amon2でログを取るにはLog::Minimalが推奨されている。

Log::Minimalが推奨されているけどファイルに書き出すのにコード書く必要があるっぽいので別のモジュールを探す。

Awesome PerlにLog::Minimalの他にはLog::DispatchとLog::Log4perlが掲載されている。ベンチマークのエントリーではCPAN本おすすめのLog::Handlerが良さそうだったので、試しに実装してみる。

Log::Handlerの特徴

Log::Handler

  • コンソールへのログ出力
  • 複数ファイルへのログ出力を設定可

他、DBIと絡めたり、メール送ったり、SOCKETで別サーバに送ったりも出来る。

Log::Handler::Examples – Examplesを読むと色々参考になる。

仕様

  • $ENV{‘PLACK_ENV’}がdevelopmentかproductionかで切り分けて、開発時にはscreen(ターミナルへ出力)とdebugログ(ファイル)にも出力させるようにしておく。
  • $cにmethod生やしておいて、$c->log->info()で呼べる。debugだけは$c->debug()でも呼べるようにエイリアス化しておく。
  • ログファイルはとりあえずdebug.log、common.log、error.logとし、Myapp/var/log以下に保存する。
  • ロギングの設定は各モードで共有としておく。
  • warnまたはdieの時にはsignalを受け取ってログを吐くようにしておく。

該当コミット

https://github.com/clicktx/p5-App-Amozon/commit/aef903bb123094f9fd3a67a4be5f5a8d7cfd451d

使う

package Amozon::Web::C::Root;
use strict;
use warnings;
use utf8;

sub index {
    my ($class, $c) = @_;

    # debug
    $c->log->debug("debug message");
    $c->debug("debug message(alias)");

    # info
    $c->log->info("info message");

    # dump
    $c->log->dump($c);

    my $counter = $c->session->get('counter') || 0;
    $counter++;
    $c->session->set('counter' => $counter);
    return $c->render('index.tx', {
        counter => $counter,
    });
}

Filed under: Amon2,perl

Trackback Uri