[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