新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2012-12-27

[Perl]Amon2なアプリケーションのbatchでconfigとかを見たいとき

http://blog.64p.org/entry/2012/12/27/195117 参照のこと。

知ってる人には当たり前なのかもしれないけど、Amon2ビギナーな自分は引っかかってしまったのでメモ。


たとえば、以下のようなバッチがあって、

[./bin/my_batch.pl]
#!/usr/bin/env perl
use strict;
use warnings;
use MyApp::Model::AnyWhere;

printf "%s\n", MyApp::Model::AnyWhere->work;

そのバッチが叩いているクラスが、

[./lib/MyApp/Model/AnyWhere.pm]
package MyApp::Model::AnyWhere;
use strict;
use warnings;

use MyApp;

MyApp->bootstrap; ### これがだめ

sub c {
    return MyApp->context;
}

sub work {
    my ($class) = @_;
    return c->config->{Foobar};
}
1;

みたいなのは、よろしくないとの事です。

正しくは、

[./bin/my_batch.pl]
#!/usr/bin/env perl
use strict;
use warnings;
use MyApp;
use MyApp::Model::AnyWhere;

MyApp->bootstrap; ### ここでbootstrapする

printf "%s\n", MyApp::Model::AnyWhere->work;


[./lib/MyApp/Model/AnyWhere.pm]
package MyApp::Model::AnyWhere;
use strict;
use warnings;

use MyApp;

sub c {
    return MyApp->context;
}

sub work {
    my ($class) = @_;
    return c->config->{Foobar};
}
1;


とするべきらしく、そうしないと色々と意図しない問題が出てきてしまうらしいので、注意が必要です。

0 件のコメント: