[Cascavel-pm] RES: cursos de catalyst e perl

breno breno em rio.pm.org
Segunda Maio 17 17:01:39 PDT 2010


Oi Glauber,

Sei como é frustrante tentar aprender algo e ver outros te mandando
RTFM. As vezes ficamos viciados em um código, bug ou conceito e
bastariam 5 minutos conversando com alguém de verdade (e não com um
livro ou tutorial) sobre o tema para clarificar tudo. Sobre cursos,
realmente a maioria do treinamento é feito diretamente em empresas, e
há uma deficiência em turmas públicas de Perl 5 moderno no Brasil.
Mas, quanto aos problemas específicos, quanto ao falar com outra
pessoa ou ter um outro par de olhos analisando o problema, é por isso
que estamos aqui!

Como a questão dos cursos já foi mencionada nessa e em outra thread,
vou me concentrar na mensagem de erro que vc está recebendo. A
primeira coisa que vale mencionar é que você precisa nos ajudar a te
ajudar. Dizer apenas que "não está funcionando" é complicado e
dificilmente trará respostas mais abrangentes do que "leia o manual X"
ou "será que é typo? Baixe o código do site oficial". O que não
funcionou? O que o livro diz que deveria acontecer e o que acontece em
vez disso? Ou será que algum módulo deu erro durante a instalação?
Quanto mais específica for sua mensagem, mais específica serão as
respostas.

O livro a que se refere, "Catalyst: Accelerating Perl Web Application
Development", de 2007, não condiz inteiramente com o estado atual do
Catalyst, que possui muitas novas features e práticas de
desenvolvimento não abordadas nele. Mesmo assim, a comunidade de
desenvolvimento do Catalyst tem uma **preocupação muito grande com
compatibilidade para trás**, então isso não é desculpa para um exemplo
no livro não funcionar. O problema é que o livro contém muitos erros,
de digitação a código, atribuidos aos editores/revisores do material
(e não ao autor) - basta olhar a página de "reviews" da Amazon sobre o
livro para ver os detalhes sórdidos.

A errata oficial do livro contém mais de 33 entradas e pode ser encontrada aqui:

https://www.packtpub.com/support?nid=1092

Por favor veja se o seu erro é resolvido com o conteúdo do link acima.

Particularmente, eu ignoraria esse livro completamente e iria para o
"The Definitive Guide to Catalyst: Writing Extensible, Scalable and
Maintainable Perl–Based Web Applications", que é considerado de muito
mais leitura e entendimento, com conteúdo atualizado e confiável
(possui errata como qualquer outro livro, mas ela é bem menor :-).

Mas voltando ao erro. O capítulo 6 tem dois exemplos,
"chapter6-AddressBook" e "chapter6-Blog". Quando tentei rodar o
primeiro, recebi o seguinte erro:

---------8<---------
$ perl script/addressbook_server.pl -d
Catalyst::Plugin::Authentication::Store::DBIC uses NEXT, which is
deprecated. Please see the Class::C3::Adopt::NEXT documentation for
details. NEXT used  at
/usr/local/share/perl/5.10.0/Catalyst/Plugin/Authentication/Store/DBIC.pm
line 36
Base class package "Catalyst::Model::DBI" is empty.
    (Perhaps you need to 'use' the module which defines that package first,
    or make that module available in @INC (@INC contains:
/home/garu/Downloads/cat/0956_Code/chapter6-AddressBook/script/../lib
/etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0
/usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10
/usr/share/perl/5.10 /usr/local/lib/site_perl .).
 at /home/garu/Downloads/cat/0956_Code/chapter6-AddressBook/script/../lib/AddressBook/Model/AddressDBI.pm
line 4
BEGIN failed--compilation aborted at
/home/garu/Downloads/cat/0956_Code/chapter6-AddressBook/script/../lib/AddressBook/Model/AddressDBI.pm
line 4.
Compilation failed in require at
/usr/local/share/perl/5.10.0/Catalyst/Utils.pm line 281.
Compilation failed in require at script/addressbook_server.pl line 53.
--------->8---------

A primeira mensagem é um aviso (warning) de que o módulo utilizado
(Catalyst::Plugin::Authentication::Store::DBIC) usa o NEXT, que é
considerado obsoleto hoje em dia. De fato, procurando por
"Catalyst::Plugin::Authentication::Store::DBIC" no CPAN
(http://search.cpan.org), vemos que há uma mensagem de aviso de que
este módulo é obsoleto e que devemos utilizar o
Catalyst::Authentication::Store::DBIx::Class em seu lugar.

A errata do livro acusa ausência da linha:

   password_field => 'password',

que deve ser adicionada logo acima da linha 27 do lib/AddressBook.pm, que diz:

   password_type => 'clear', # use salted_hash for real applications

A segunda mensagem diz:

Base class package "Catalyst::Model::DBI" is empty.
    (Perhaps you need to 'use' the module which defines that package first,
    or make that module available in @INC (@INC contains:
/home/garu/Downloads/cat/0956_Code/chapter6-AddressBook/script/../lib
/etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0
/usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10
/usr/share/perl/5.10 /usr/local/lib/site_perl .).

que significa que um módulo herda de Catalyst::Model::DBI, mas este
útimo não está instalado. De fato, não tinha ele aqui e ele não está
no Makefile.PL do exemplo (outra entrada para a errata do livro?)

Depois de instalar o "Catalyst::Model::DBI" na minha máquina, o
exemplo carregou, e parece funcionar sem maiores problemas (não testei
mais a fundo).

Ok, um a menos, vamos ao segundo exempo. Vale notar que rodei o
segundo apenas depois das correções acima. A mensagem que recebi foi
essa:

---------8<---------
$ perl script/blog_server.pl -d
Blog::Model::Filesystem uses NEXT, which is deprecated. Please see the
Class::C3::Adopt::NEXT documentation for details. NEXT used  at
/home/garu/Downloads/cat/0956_Code/chapter6-Blog/script/../lib/Blog/Model/Filesystem.pm
line 49
Couldn't instantiate component "Blog::Model::Filesystem", "base
/tmp/test does not exist at /usr/local/share/perl/5.10.0/Catalyst.pm
line 2507"Compilation failed in require at script/blog_server.pl line
53.
--------->8---------

Ok, o primeiro é nosso warning sobre o NEXT. O segundo afirma que o
caminho "/tmp/test" não existe, e o módulo do livro (o tal
Blog::Model::Filesystem) usa esse diretório como base. Uma vez criado,
o demo rodou sem problemas (supondo que o código inicial deva apenas
exibir "Blog").

Espero ter ajudado! Se tiver mais algum problema, por favor não hesite
em perguntar.

[]s

-b

2010/5/17 Glauber Machado Rodrigues (Ananda) <glauber.rodrigues em gmail.com>:
> Confirmando, baixei os códigos de novo, deixe perl Makefile.PL neles, make e
> run no exemplo do caplitulo 6 e nada. Isso me deixa em dúvida no quando os
> scripts são portáveis por aí, mas whatever, eu só queria um curso e nego vem
> me mandar fazer dever de casa. Que saco.
>
> 2010/5/17 Glauber Machado Rodrigues (Ananda) <glauber.rodrigues em gmail.com>
>>
>>
>> 2010/5/17 Lindolfo "Lorn" Rodrigues <lorn.br em gmail.com>
>>>
>>> Glauber,
>>> Acho que você não entendeu minha mensagem, a maioria dos livros tecnicos
>>> costumam colocar o código fonte escrito no livro para download, o livro de
>>> catalyst que você está lendo tem todo o código fonte
>>> aqui: http://apress.com/book/downloadfile/4439
>>> O outro eu deixo como lição de casa você baixar e usar :)
>>> Aí não tem como errar.
>>
>>
>> Acho que você não entendeu a minha. O código não funfou, o do livro, o do
>> capítulo que eu falei. Não comigo.
>>
>>
>> --
>> Glauber Machado Rodrigues
>> (Só mais um filho de Deus)
>>
>> skype: glauber.rodrigues
>
>
>
> --
> Glauber Machado Rodrigues
> (Só mais um filho de Deus)
>
> skype: glauber.rodrigues
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


Mais detalhes sobre a lista de discussão Cascavel-pm