Mojoliciousのウェブコントローラ上からCommandコントローラを実行したい場合

前提

例えば定期的にcron実行してる更新処理を、ブラウザからボタンを押した際にも同じ更新処理させたいってこと、ありますよね。でもウェブコントローラーの方にも同じ処理を書くのもナンセンスなので、既存のcron用コマンドプログラムをただ叩きたいわけです。

仮に、 Mojolicious::Commandsupdate というMojoliciousのCLI用プログラムが用意されているとします。この場合、コマンドラインからは通常以下のようなコマンドを叩いて実行するかと思います。

perl script/sample update -x --yy --zzz=123

これを Perlsystem() 関数にそのまま渡しても動くかもしれませんが、そもそも同じMojoliciousアプリのモジュールなので、ちゃんと use して実行した方が(精神衛生上にも)よさそうです。

正攻法

以下、正当な方法で同じMojoliciousアプリ内のCLIコマンドを叩くやり方です。

# ボタンが押されたら更新実行
if($update){
    use Sample::update;
    Sample::update->new($self)->run('-x', '--yy', '--zzz=123');
}

こっちの方が気持ちいいですよね!