Tag: rails

Rails Rumble 2010

Esse final de semana (16 e 17 de outubro) tive a honra de participar do Rails Rumble 2010 junto com @cmilfont @rodrigodealer e @razenha.

Sem sombra de dúvidas foi uma das melhores experiências profissionais em ‘eventos’ que tive. O desafio era desenvolver uma aplicação, qualquer que seja, no prazo de 48 horas usando Rails.

Foram um total de 300 equipes cadastradas, sendo cerca de 30 brasileiras, e nós éramos uma delas: http://railsrumble.com/teams/cangaceiros

Contávamos com a participação inicial do Maurício Linhares, que não pode participar. Corremos então a procura do Azenha por indicação do Milfont. O cara mora em SP, e nós cá no Ceará, o que dificultou um pouco a comunicação, já que era basicamente via Skype e Twitcam.

Enfim, nosso projeto era desenvolver um aplicativo de indexação de livros. O usuário se cadastra e envia seus livros que tem em sua biblioteca pessoal (em formato PDF). A aplicação lê o arquivo e o indexa, pronto para ser buscado tanto pelos dados de cadastro como pelo conteúdo. Uma aplicação simples, mas que exigiu boa quantidade de gems.

Eu particularmente estava muito envolvido com o design, nesse projeto, e até já havia feito uma prévia de uma estante de livros um dia antes de começar o Rumble. Trabalhamos o sábado todo com essa tela, mas o sistema foi tomando forma e eu vi que se tornaria algo completamente diferente do que eu vinha imaginando. 11h do domingo (último dia do desafio) resolvi refazer o layout do zero. Foi uma decisão que titubiei bastante para tomar, mas que precisava ser tomada, e rápido, pois um dos pontos avaliados eram justamente a aparência. Refiz, e às 14h estava um layout completamente diferente no ar.

O desafio acabou às 21h (no Ceará). O resultado foi satisfatório, apesar de ter bastante arestas a serem aparadas (um erro chatinho quando se loga pela primeira vez, e outras coisitas mais). Justificável, se analisado que começamos no projeto somente às 12h do sábado.

Enfim, para mim, a prova da produtividade do Rails, de que trabalho em equipe é fundamental, e que, querendo (e sob pressão) quase tudo é possível.

Segue alguns links memoráveis do evento:

http://akitaonrails.com/2010/10/18/rails-rumble-na-gonow-retrospectiva – Retrospectiva do Akita

http://www.youtube.com/watch?v=kp0T1YCSLfc – Entrevista do Akita com a equipe Cangaceiros

http://razenha.wordpress.com/2010/10/20/rails-rumble-codigo-diversao/ – Retrospectiva do Azenha, que tava com a gente

http://twitpic.com/2ybbw4 – Flagra da transmissão ao vivo de algumas equipes brasileiras

Resolvendo problema de zlib na instalação do Rails com RVM

Tentando instalar o rails utilizando o comando “gem install rails –pre” recebia sempre o erro:

ERROR:  Loading command: install (LoadError)
no such file to load — zlib
ERROR:  While executing gem … (NameError)
uninitialized constant Gem::Commands::InstallCommand

Para solucioná-lo, basta seguir as seguintes etapas:

rvm package install zlib
rvm remove 1.8.7 (no caso, a versão do seu Rails)
rvm install 1.8.7 (sim, a mesma que fora removida)

Pronto, agora ele será recompilado com a zlib.

Simples!

Mongrel no lugar de Webrick

Vou ser bem direto: Webrick não é uma opção para servidor Ruby on Rails. Nem para testes.

Recentemente trabalhei no desenvolvimento de um sistema de indicações de oportunidades de negócios. O sistema era bem simples, e o desenvolvimento só não foi mais rápido pois foi o primeiro projeto adotado a ser desenvolvido em Ruby on Rails pela empresa. Como já citei num artigo anterior, “as primeiras semanas foram doloridas. Pensar tudo de trás para frente, uma nova linguagem, e tudo o mais que uma migração assim nos permite sofrer, pode ser um pouco dolorido, mas vale a pena.”

Uma das coisas que passei mais sufoco foi, com certeza, a dificuldade de configurar um servidor de entrega. Diversos fatores entraram em questão, a própria decisão de qual máquina seria escolhida, a criação da máquina virtual (já haviam outras máquinas virtuais instaladas) e outras particularidades que não dizem respeito ao RoR.

Se tratava de um servidor simples, que seria utilizado apenas para mostrar aos clientes o sistema funcionando e permitir que eles pudessem “brincar” um pouco com o sistema. Pensei logo: “ora, já usamos o Webrick para testes locais, logo não encontraremos problemas.” Mas não foi bem assim.

Rodar o Webrick localmente pode fazer tudo o que você pretende, mas tente rodar de um IP remoto. Pensando bem, tente rodar utilizando seu póprio IP da rede (não vale 127.0.0.1). No caso do nosso sistema, o carregamento de uma página simples de login durava cerca de 3 min. Quando entrava, enfim, no sistema, além da demora, alguns elementos (imagens) não eram carregadas. O Webrick era a grande dor de cabeça.

Parece besteira de iniciante. E realmente era, mas naquele momento eu simplesmente não poderia ter perdido tanto tempo com isso.

A segunda tentativa que nos parecia óbvia foi instalar o Passenger: um mod_rails para o Apache que supostamente seria a opção mais viável. A instalação não foi tão diferente quanto qualquer mod para Apache, e suas configurações. O problema foi a inconstância do pacote e das gems. Primeiro que é quase impossível desinstalar a gem. Quando assim o fiz, simplesmente a gem continuava lá na “gem list”, mesmo desinstalada. Depois de formatarmos a máquina virtual e instalarmos tudo do zero novamente, funcionou perfeitamente. Nos demos por satisfeitos.

No dia seguinte, sem maior explicação ou alguém ter sequer acesso ao servidor, o passenger não funciona mais. E isso já era véspera da entrega do sistema. Algo assim não poderia falhar. Não era uma opção.

A essa altura, depois de muitas tentativas de correção, já havíamos desistido de entregar através do servidor de testes. Continuamos o desenvolvimento do sistema, pois alguns tópicos precisavam ser finalizados.

Dia seguinte, dia de entrega. Lendo alguns artigos em blogs que tratavam de Rails, me veio a possibilidade de testar o Mongrel. Fui meio sem esperança, pensando se tratar de algo “como o Webrick”, que serviria apenas para testes locais. A instalação é bastante simples, não passando de um “gem install mongrel”. Para rodar, bastava digitar “mongrel_rails start”. Nenhuma configuração foi necessária, nenhuma palha foi mexida, nada mais foi feito. Simplesmente duas linhas e lá estava meu servidor de testes funcionando e rodando a aplicação perfeitamente.

Em 2 min concluí uma operação que me custou cerca de 20 horas sem sucesso. Mais tarde, ao me aprofundar e ler casos de uso, descobri que o mesmo servidor Mongrel é o servidor Rails utilizado pelo Twitter. Sem sombra de dúvidas, poderia ser facilmente utilizado no servidor final, de produção.