Hoje quero mostrar algo muito simples, mas é pra encorajar as pessoas que ainda não usaram o MongoDB como banco de dados de seus projetos.
É importante você conhecer pelo menos um pouco do mongodb, saber como instalar, iniciar, parar, reiniciar, fazer uma query e inserir e editar documentos.
Depois que já tiver este background então vale a pena dar uma olhada na página do Mongoid, que é uma ótima gem criada pelo Durran Jordan pra trabalhar com mongodb no rails.
Não faz muito tempo que escutei falar de pjax uma técnica que une ajax + pushState e que o Chris Wanstrath do github difundiu criando o jquery-pjax, recentemente o Ryan Bates do railscts.com publicou um epsódio mostrando como você pode utiliza-la com o rails.
Você já deve ter visto a arvore de códigos (source tree) que o github utiliza, quando você clica em um arquivo ou diretório ele atualiza o conteúdo via ajax e altera a url pra que você possa copiar e mandar pra outras pessoas sem o uso de ancoras que hoje em dia é o uso comum. Isso mantém o histórico de navegação dos navegadores funcionando.
Desde que a Phusion lançou o passenger eu sempre o utilizei em conjunto com o apache que já era familizarizado.
Quando trabalhei na Digital Pages me deparei com o pessoal utilizando o passenger com nginx, pra falar a verdade eu só tinha escutado falar deste servidor web e nem dei muita bola, além de que a aplicação caia de tempos em tempos e o log ficava poluído com algumas mensagens que o passenger adicionava, mostrei para o pessoal como utilizar o apache no lugar do nginx, a aplicação acabou ficando bem estável e optamos por colocar em produção.
Dando continuidade aos últimos artigos resolvi escrever sobre a Guard, uma gem que complementa de forma incrível o uso do spork e automatiza seus testes.
A Guard tem uma função parecida com a Watcher, que praticamente fica monitorando alterações em seus arquivos e pode executar deterinadas ações quando isso ocorre, porém ele é bem estruturado e aceita outras gems complementares pra facilitar nosso dia a dia, uma destas é a guard-rspec e a guard-spork.
Embalado um pouco com o último post que era pra melhorar a performance do seus test vou falar um pouquinho de outra gem que também melhora a performance, mas agora em modo de desenvolvimento.
A Gem ActiveReload do Robert Pankowecki faz uma boa diferença em projetos grande com muitos arquivos, pois quando você sobe um servidor em modo de desenvolvimento ele carrega todos os arquivos como se fosse no modo de produção e quando você alterar suas classes ele faz o reload somente dos arquivos alterados, logo o tempo pra de carregamento das páginas diminui bastante. É compatível com ruby >= 1.8.7 e já foi testado com rails >= 3.0.10.
A um certo tempo ouvi falar da gem Spork criada pelo Tim Happer que trabalha como um servidor drb, funciona mais ou menos como um servidor web em modo development onde todo rails e as configurações como rotas, spec_helper, factories e outras são carregadas e persistem em memória, então quando você rodar seus testes usando o servidor drb não será necessário carregar todo o framework e sim apenas suas classes e testes.
O Slim é uma gem desenvolvida por Andrew Stone pra criação de templates com foco na simplicidade como o HAML, mas que tem um foco mais voltado pra velocidade. A sintaxe dos dois são bem parecidas como maior diferença que no Slim você não precisa escrever o % na frente das tags, outra diferença que encontrei foi que ao meu ver o Slim está com uma organização um pouco melhor no código.
Recentemente o @leobessa fez um post no twitter com um link desta wiki que mostra como você consegue melhorar a velocidade dos seus testes que usam o Devise, no caso dele a melhora foi de 54.43 para 9.51 segundos.
A gem settingslogic é uma forma simples de consumir arquivos de configuração em uma applicação rails. Já faz alguns anos que utilizo nos meu projetos e recomendo pra quem ainda não a usa.
Esses dias trabalhei em um projeto e vi o pessoal usando uma constante CONFIG que carrega um arquivo config.yml dentro do environment.rb ou em um initializer qualquer. Basicamente o settingslogic tem a mesma funcionalidade a diferença é que em vez de ficar criando constantes você cria um model e este model responde como método, através de method_missing pra cada item do yml. Veja abaixo dois exemplos pra entender esta diferença.
O Xavier Shay públicou a alguns dias um artigo mostrando um patch que ele fez alterando mais de 3000 linhas de código e 20 dependências do ruby 1.9.2 e conseguiu fazer o load do rails ficar aproximadamente 60% mais rápido. O que todos achavam estranho é o patch não ser aceito pelo core team, mas a de se entender que alterar tanta coisa como o que o Xavier fez é algo extremamente complicado.
Porém 4 dias após este artigo o Masaya Tarui do core team do ruby fez um commit de 26 linhas na class load.c (o loader em c do ruby) e obteve uma performance até melhor do que o código do Xavier chegando a um ganho de até 64% em relação ao ruby 1.9.2.
Se tiver mais interesse neste assunto o Ruby Inside publicou um artigo contando toda esta história.