鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Qudoのarg引数にハッシュを渡したい

以下のようなコードを書きまして、Qudoのarg引数にハッシュを渡したい

#!/usr/bin/env perl
use strict;
use warnings;
use Qudo;
use FindBin;
use lib "$FindBin::Bin/../lib";
    my $qudo = Qudo->new(
        driver_class => 'Skinny', # optional.
        databases => [+{
                   dsn      => 'dbi:SQLite:./qudo.db',
                   username => '',
                   password => '',
               }],
    );
    for my $index (1 .. 100){
        $qudo->enqueue("Worker::Test", { arg => {name=>'hello'. $index}});
    }
;

実行すると以下のようなエラーになるのです。

$ ./script/enqueue.pl
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@ DBIx::Skinny 's Exception @@@@@
Reason  : you can't set bind value, arrayref or scalar. you set HASH ref value. at /usr/lib/perl5/site_perl/5.14/DBIx/Skinny.pm line 553.

SQL     : INSERT INTO job
          (`priority`, `enqueue_time`, `arg`, `retry_cnt`, `grabbed_until`, `run_after`, `uniqkey`, `func_id`)
          VALUES (?, ?, ?, ?, ?, ?, ?, ?)

BIND    : $VAR1 = [
          0,
          1391121007,
          {
            'name' => 'hello1'
          },
          0,
          0,
          1391121007,
          undef,
          1
        ];

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 at /usr/lib/perl5/site_perl/5.14/Qudo/Manager.pm line 164.

ずっど避けていた(スカラーでなんとかしていた)んですが、 さて、どうしよう。

<<TODO>> [Qudo::Manual::JA] (http://search.cpan.org/~nekokak/Qudo-0.01_01/lib/Qudo/Manual/JA.pod)

    $qudo->global_register_hooks('Qudo::Hook::Serialize::JSON');

追加して実行したけどなんか動かない。

Can't locate object method "global_register_hooks" via package "Qudo" at ./script/enqueue.pl line 15.

結局、参照していたドキュメントが古かったw shiba_yu36さんのブログを参照してやり方がわかりました。 default_hooksをnewで渡せば良かったんですね。

Qudo, daemontools, capistranoを使ってWorker処理の仕組みを作る

    my $qudo = Qudo->new(
        driver_class => 'Skinny', # optional.
        databases => [+{
                   dsn      => 'dbi:SQLite:./qudo.db',
                   username => '',
                   password => '',
               }],
        default_hooks => ["Qudo::Hook::Serialize::JSON"]
    );

最新のドキュメント [Qudo::Manual::JA::Function] (https://metacpan.org/pod/Qudo::Manual::JA::Function) でも、「register_hooks」が残存していたので、Pull Requestを送ってみようとおもう。