Dica rápida: problema com authlogic + rails 3

Mais uma da série de dicas rápidas, agora referente à um bug com o authlogic e rails 3.

Ao seguir o railscast do Ryan Bates sobre o Authlogic, porém utilizando o rails 3, ao tentar executar o login você irá se deparar com o seguinte erro:

undefined method `to_key' for #

Este erro quer dizer que o UserSession.new está sendo chamado sem passar username e password para ele, isso ocorre porque o esquema de rotas no rails 3 é diferente, causando assim dois problemas:

  1. Primeiro, Authlogic não consegue criar um hash com seu username/password e armazenar em :user_session, logo, params[…] não vai funcionar.
  2. Segundo, Authlogic não sabe qual método REST utilizar para a rotina de autenticação, logo vai falhar ao tentar executar o método create.

A solução que realmente funcionou para mim foi sobrescrever o método to_key no model UserSession(também devemos sobrescrever o persisted?) como a seguir:

def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end

def persisted?
false
end

Utilizei como referência para este post, o seguinte link: Authlogic and Rails 3 solution vale a pena dar uma conferida, lá o autor detalhou mais o erro e também postou outra possível solução(que não rolou aqui para mim).

Abraços e até a próxima !

Dica rápida 2: problema ao instalar a gem mysql

Pessoal, aproveitando o embalo de domingo das dicas rápidas, aqui vai mais uma. O cenário é o seguinte: rails 3 instalado e a necessidade(e preferência) de utilizar o banco de dados mysql; sistema operacional: Mac OS X 10.6.6.

Ao tentar executar bundle install com a gem mysql no Gemfile, ou ao tentar executar gem install, o erro retornado é o seguinte(resumo):

Building native extensions.  This could take a while…

ERROR:  Error installing mysql:

ERROR: Failed to build gem native extension.

Erro detalhado: http://pastie.org/1535589

Com a ajuda de nosso amigo de sempre, o Google e também com as dicas da mensagem de erro também cheguei à conclusão de que a causa do erro foi o fato de a instalação do mysql estar em um local que não foi encontrado ao tentar instalar a gem, logo, a solução foi rodar o comando com uma das opções e obtive sucesso rodando da seguinte maneira:

gem install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config

Espero que este post ajude outras pessoas além de me ajudar futuramente quando me deparar com este problema, hehe !

Dica Rápida: Verificar se a gem é compatível ao Rails 3

Hoje é dia de dica rápida, ou seja, algo bem útil mas que não necessita de grandes explicações, ou um post extenso.

A dica rápida de hoje serve para aqueles que como eu estão se aventurando na versão mais atualizada do rails e querem saber se a gem a ser utilizada no projeto é compatível com o rails 3. Aliás, esta dica serve para testar também a compatibilidade com jruby e ruby 1.9.

Basta entrar no site railsplugin e procurar pela gem que deseja utilizar, simples assim !

 

Até a próxima !

 

Rails Templates

Estou feliz por voltar a escrever no blog e este é o primeiro post de 2011, falando nisso, feliz 2011 atrasado para todos !

E hoje o assunto a ser tratado é algo que agiliza bastante a rotina de um railer criar novos projetos com o ambiente que prefere. Bom, eu sou um pouco suspeito para falar disto pois sou da escola do Java, onde costumamos perder bastante tempo configurando, isso pelo menos até conhecer o maven e seu famoso arquivo pom.xml, mas mesmo assim sempre tinha algo que dava algum problema e o tempo gasto em configurar um ambiente e um projeto novo era alto demais. Graças a Deus, com o Rails não temos esse problema porque podemos ter um template com gems a serem instaladas, arquivos a serem copiados e configurações a serem feitas.

Eu não poderia escrever este post sem antes citar o Daniel Lopes que é instrutor da e-Genial e ministrou cursos de rails que pude participar em meados de 2010. Em um destes cursos o Daniel citou sobre templates e para darmos uma conferida em seu github. Depois de muito tempo após o curso acabei olhando somente agora este conteúdo e gostei muito, comecei a utilizá-lo em minha rotina e estou aprovando. Se tiverem tempo, dêem uma olhada em meu github, a aplicação que clonei e personalizei, a my_template.

O seu uso é bem simples, se quiser personalizar, basta clonar o projeto e alterar o arquivo template.rb da maneira que quiser, poderá também alterar os arquivos que deseja incluir em seus futuros projetos. Se preferir utilizar direto do github, pode usar:

rails new app -m github.com/danielvlopes/base_app/raw/master/template.rb

ou:

rails new app -m github.com/mvoto/my_template/raw/master/template.rb

Para resumir, templates facilitam seu trabalho na hora de criar um novo projeto rails, você não perde tempo instalando gems, nem jogando javascripts, imagens, css e arquivos de layout que costuma jogar em alguns projetos com seus padrões. Recomendo fortemente !

Retrospectiva de Sprint para o final de ano

Como todos sabem, final de ano é correria para todo mundo e acaba não sobrando tempo para muita coisa. Eu por exemplo, queria preparar um post técnico bem legal para fechar o ano bem, mas infelizmente vai ficar para o começo de 2011. Para este post, farei uma analogia entre a reunião de retrospectiva do sprint, da metodologia scrum e uma análise de como foi sua carreira profissional neste ano.

Bom, para aqueles que já conhecem ou trabalharam com o Scrum já sabem como a reunião de retrospectiva funciona, mas para os que ainda não conhecem, sugiro que leiam o resumo feito pelo pessoal da IMPROVE  IT: http://improveit.com.br/scrum, pois usarei alguns termos utilizados na metodologia.

A idéia de escrever este post, surgiu de um estalo que tive e achei bem interessante: por que não comparar nosso ano com um sprint ? E melhor ainda, por que não analisar nosso ano, ver o que houve de ruim para tentar melhorar e o que teve de bom para se aproveitar como em uma retrospectiva de sprint ?

Então, mãos à massa, post its de pontos negativos na parede e vamos lá: analisem os aspectos negativos do seu ano profissional, aquele projeto que não foi entregue no prazo(o que melhorar para mudar, o que fazer para conseguir alcançar o prazo, por que atrasou o projeto), aquele estudo que teve que ser deixado de lado, aquelas horas extras que foram apenas um favor e não remuneradas, aquele freela que você deixou passar.

Agora os post its com pontos positivos: aquela promoção que você conseguiu, aquela metodologia que você conseguiu colocar em prática e obteve bons resultados, aquela tecnologia nova que você aprendeu, aquele projeto pessoal que você concluiu, a conversa produtiva que você teve com seu chefe/equipe.

Beleza, mas pra que tudo isso ?

Ué, após preencher e colocar todos os post its nos quadros de pontos positivos e negativos, é hora de discutir cada um e analisar, com você mesmo, perca um tempo tentando entender algumas coisas e melhorando sua auto-estima para aqueles pontos positivos. Com isto, acredito que você terá uma boa leitura de como foi seu ano, poderá traçar estratégias melhores para alcançar seus objetivos para o próximo ano e por que não, traçar novas metas para 2011 ?

Espero ter contribuído em alguma coisa para você que está lendo este post. Um feliz natal e um 2011 abençoado, cheio de sucesso e realizações !

Html Reader, o experimento !

Iae galera, vou aproveitar minha insônia e escrever mais um post, desta vez sobre ruby.

A bola da vez é uma aplicação que desenvolvi esses dias(https://github.com/mauriciovoto/html_reader) que surgiu com a necessidade de minha noiva estar um pouco revoltada de pedirem em seu trabalho para fazer um exaustivo trabalho de ctrl C + ctrl V. Ela tinha que copiar informações de todos os Procon do estado de SP. Daí que me surgiu a ideia de desenvolver algo para ajuda-la.

Esta foi uma ótima oportunidade para botar em prática algumas coisas que havia e venho estudando, algumas delas, recomendo fortemente, como o jeweler, o rspec(quem acompanha o blog e meu twitter sabe que venho estudando bastante esta ferramenta), o infinity_test e outras gems como hpricot, rest-open-uri e spreadsheet. Além de ser outro laboratório de git pois tenho o péssimo costume de desenvolver aplicações e mante-las em minha máquina.

Bom, para resumir o que utilizei, o jeweler é uma ferramenta para geração de gems, ou seja, gera um projeto ruby com uma mínima estrutura para iniciar um desenvolvimento ideal.

O rspec como já citei antes no blog, é uma ferramenta para escrever testes como especificações.

O infinity_test é uma biblioteca que permite ao desenvolvedor ver em tempo real se seus testes estão passando ou não, um autotester que a cada alteração que é feita, roda os testes em background e notifica(em conjunto com outra ferramenta, como o growl para mac os).

O hpricot e o rest-open-uri são gems que permitem a leitura do html dos sites, sugiro a leitura das documentações para quem quiser estudar, apliquei apenas o básico em minha aplicação.

Por último, o spreadsheet é uma gem para manipulação de planilhas excel, apesar da pouca documentação não tem muito segredo de uso. Também utilizei em minha aplicação o básico de geração, nada diferente do que encontramos na página da gem.

Espero que possam dar uma conferida na app: html_reader críticas e sugestões são sempre bem-vindas ! E mais uma vez agradeço ao meu digníssimo camarada @raulsouzalima pois ele me indicou várias dessas gems e também agradecer ao @danielvlopes que apresentou brevemente o jeweler em uma de suas aulas que tive o prazer de assistir.

Como convencer de que é bom testar ?

Pessoal, estou estudando aqui bastante sobre BDD, TDD e algumas ferramentas para aplicar essas técnicas de uma vez por todas em minhas aplicações Rails, portanto ainda não tenho material nem conhecimento suficiente para postar sobre este assunto aqui no blog. Ao invés disso, vou escrever sobre algo que me intriga um pouco: o que meu chefe pensa à respeito disso ?

Bom, como disse, tenho estudado para aprimorar técnicas de desenvolvimento e em um breve futuro entregar aplicações com muito mais qualidade. Isso é uma coisa que me empolga, me motiva muito à ponto de eu conversar com meu atual chefe sobre o uso em um sistema que migraremos de uma linguagem de 3 letras(que não é PHP) para Ruby on Rails e aparentemente ele não se empolga tanto. Sua motivação aparece quando falo de melhorias na estrutura, performance e usabilidade.

Claro que na cabeça de um empreendedor em busca de lucros ele não quer saber de processo mas sim de resultados e isso no meu ponto de vista é um pouco preocupante. Alguém pode me responder como obter qualidade no produto final se não tem qualidade no processo atual ? E se o próximo desenvolvedor a ser contratado não conseguir dar manutenção no sistema de tanta gambiarra que foi feita ? E se o próximo desenvolvedor criar a nova funcionalidade, mas quebrar uma outra antiga e isso acontecer quando o diretor do seu cliente estiver navegando no sistema ?

Estas são algumas perguntas a serem feitas para quem não é a favor do uso de testes, por exemplo e de uma possível demora no início da implantação destes em sua empresa. Acredito que essa cultura deva ser estabelecida em uma empresa para que todos vistam essa camisa e não a tirem nos momentos de incêndio como já vi acontecer em trabalhos anteriores.

Quando você passa por um projeto legado que está mal feito, cheio de bugs e problemas de estrutura, fica muito mais fácil de evidenciar e mostrar para quem for que você pode fazer algo melhor, mais organizado e com uma garantia de qualidade que são os testes. Sem contar que se conseguir fazer uma demonstração de BDD na prática com o Cucumber por exemplo, qualquer pessoa que veja a documentação(features e steps) consegue saber o que o sistema faz !

Estou na minha luta para tornar os testes que só vem para somar uma realidade. Espero que você leitor, que já utiliza esta prática, encoraje os que ainda não o fazem e você leitor que não escreve testes ainda, que procure estudar e ir atrás pois realmente vale muito a pena !

Um bom ponto de partida para quem quer começar a aprender são os railscasts do Ryan Bates que falam sobre cucumber, rspec e webrat.

Algumas outras referências:

Blog do Chelimsky (pai do RSpec)

RSpec Info

Simples Ideias – Usando o RSpec para testar sua aplicação Rails

Screencast do Anderson Leite da Caelum – Introdução à Cucumber e RSpec

Cucumber Making BDD Fun