[SP-pm] Catalyst: bug a reportar ou comportamento esperado ?

Eden Cardim edencardim at gmail.com
Tue Jul 6 11:09:48 PDT 2010


>>>>> "Giuliani" == Giuliani Sanches <giulianisanches em gmail.com> writes:

    Giuliani> Boa noite, Antes de pensar em reportar um bug, "prigunto":

    Giuliani> Estava eu aqui brincando com o Catalyst::Helper::AuthDBIC.

    Giuliani> "Sabiamente" rodei ele duas vezes seguidas. Percebi que
    Giuliani> meus testes começaram a dar erro e comecei a catar na
    Giuliani> aplicação o que poderia ser.

    Giuliani> Notei que muito código foi duplicado e então fui
    Giuliani> organizando tudo, porém o erro persistia. Foi quando eu
    Giuliani> lembrei do .conf da aplicação, e la estava:

    Giuliani> <Model Auth>
    Giuliani>   schema_class Foo::Auth::Schema
    Giuliani>   connect_info dbi:SQLite:__path_to(db/auth.db)__
    Giuliani>   connect_info user connect_info passwd # keep these here for dsns that need 'em
    Giuliani> </Model>
    Giuliani> <Model Auth>
    Giuliani>   schema_class Foo::Auth::Schema
    Giuliani>   connect_info dbi:SQLite:__path_to(db/auth.db)__
    Giuliani>   connect_info user connect_info passwd # keep these here for dsns that need 'em
    Giuliani> </Model>

    Giuliani> Removi uma das entradas e tudo voltou ao normal. O
    Giuliani> engraçado era o erro ao rodar o teste:

    Giuliani> Couldn't load class (Foo) because: Not a HASH reference at
    Giuliani> /home/khaoz/perl5/lib/perl5/Catalyst.pm line 2500.

    Giuliani> Sinceramente, só descobri que o problema era as duas
    Giuliani> entradas ali por acaso, por que resolvi dar uma olhadinha
    Giuliani> no .conf.

    Giuliani> Ignorando o fato de que a cagada de rodar o comando duas
    Giuliani> vezes foi minha, essa mensagem de erro não poderia/deveria
    Giuliani> ser mais clara ?

Na verdade, a culpa é do Config::General, é uma feature documentada
inclusive (na seção "IDENTICAL OPTIONS (ARRAYS)"), quando você declara
duas tags com o mesmo nome ele cria um array e o catalyst espera um
hash, por isso o problema.

roda aí:

perl -MData::Dump=dump -MConfig::General -le'print dump(Config::General->new('-String' => qq{<dir blah>\nuser max\n</dir>\n<dir blah>\nuser hannes\n</dir>})->getall)'

É um problema difícil de debugar mesmo, e é mais difícil ainda de
resolver, já que o Catalyst é agnóstico ao módulo de configuração, e
quem passa a estrutura de dados ao Catalyst é o Config::Any. O lance é
tentar se ater a uma configuração que gere um hash. Enfim o catalyst não
é quem vai receber o patch, talvez o Catalyst::Plugin::ConfigLoader ou o
Config::Any. É o preço que se paga pela flexibilidade.


More information about the SaoPaulo-pm mailing list