Usando ApacheBench para testes: Apache/mod_rails e Nginx/mongrel
15/07/2008 — 3 comentários — Tags: apache, benchmark, railsO ApacheBench é um software do Apache usado para fazer testes de perfomance de servidores web, independente do servidor usado. Isso é muito útil para comparar o desempenho de diversas configurações, mas nem sempre pode apresentar a realidade do ambiente.
O ApacheBench é distribuído nos ambientes Linux pelo pacote apache2-utils - versões para Mac OS e Windows podem ser encontradas no site do software. Em distribuições como o Ubuntu, para instalá-lo basta um apt-get install apache2-utils (como super-usuário). A partir daí, o comando ab fica disponível em seu terminal e é só correr para o abraço!
Um teste pode ser feito com o comando:
O Flag '-n' indica o número de requisições, enquanto a opção '-c' indica a ocorrência de conexões simultâneas. A saída do comando acima é semelhante a:
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.leonardofaria.net (be patient).....done
Server Software: Apache/2.2.8
Server Hostname: www.leonardofaria.net
Server Port: 80
Document Path: /
Document Length: 0 bytes
Concurrency Level: 5
Time taken for tests: 16.460184 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 41600 bytes
HTML transferred: 0 bytes
Requests per second: 6.08 [#/sec] (mean)
Time per request: 823.009 [ms] (mean)
Time per request: 164.602 [ms] (mean, across all concurrent requests)
Transfer rate: 2.43 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 255 291 21.2 287 361
Processing: 442 506 131.1 485 1732
Waiting: 438 492 42.9 484 655
Total: 698 797 137.9 774 2040
Percentage of the requests served within a certain time (ms)
50% 774
66% 804
75% 812
80% 818
90% 878
95% 925
98% 982
99% 2040
100% 2040 (longest request)
Dezenas de possibilidades podem ser traçadas com esses testes.
Nos meus benchmarks, realizei basicamente 2 testes: a renderização do index.html default do framework e a renderização de um Time.Now do Ruby. Em ambos os testes, o desempenho do nginx + mongrel_cluster foi superior ao Apache + mod_rails. Esse teste também foi feito por aí, e com resultados semelhantes ao meu.
Desse modo, em uma balança estão Apache/mod_rails e Nginx/mongrel_cluster. De um lado, pesam a facilidade de deployment e o crescente uso em shared hosts. De outro lado pesam a rapidez do servidor e a 'dificuldade' do deployment. E aí? De que lado você vai ficar?
Rails Screencasts
11/07/2008 — 2 comentários — Tags: rails, screencast
É incrível a qualidade de material existente sobre Rails. A comunidade está cada vez mais crescendo e para quem está vindo para o lado Rails da força, nada mau uns screencast para aprender.
- Railscasts: já são 117 episódios do mais conhecido site de vídeos.
- PeepCode: screencasts de ótima qualidade, entretanto, pagos (o Júlio fez um ótimo post sobre isso).
- Ruby Plus: outro site interessante de conteúdo.
- ThinkRefresh: um site com um bom número de screencasts.
- Learncasts: o Lucas Húngaro começou sua série de screencasts.
- Git: git parece ser ainda um mistério, mas não se você ver esses screencasts.
- TDD Screencast: não assisti ainda, mas promete ser um screencast bem bacana.
- [update] o Carlos Brando também tem screencasts brilhantes! (E não deixe de conferir o Rails Podcast Brasil, do qual ele também participa.)
Nasceu: codestacker.com
02/07/2008 — 4 comentários — Tags: codestacker, rails
Nasceu meu projeto Rails de 2 fins-de-semana: codestacker (é em minúsculas, tá?) é um site para compartilhamento de código, anônimo ou não, público ou privado. Existem vários sites semelhantes ao codestacker, entretanto, quis fazer minha solução cobrindo minha abordagem para o problema e como posso solucioná-lo.
Tenho vários features que ainda não implementei, caí na real e lancei o básico do serviço. Existirão outros fins-de-semana para atualizações.
Então é isso, vejo todo mundo lá.
annotate_model, gem útil da semana
30/06/2008 — 5 comentários — Tags: railsTrabalhar com Rails é certeza de encontrar ótimo material para trabalhar/documentar sua aplicação. Tenho uma lista de plugins/gems úteis para o desenvolvimento, o que daria um enorme post. Seguindo os conceitos do Getting Real, rapidinho vou postando (é muito material).
O primeiro da lista é o annotate_model, um gem que gera para cada model as informações da estrutura da tabela daquela entidade. Por exemplo:
# Schema version: 20080628203259
#
# Table name: comments
#
# id :integer(11) not null, primary key
# name :string(255)
# email :string(255)
# body :text
# code_id :integer(11)
# created_at :datetime
# updated_at :datetime
#
class Comment <ActiveRecord::Base
Uma forma de se conhecer os atributos de uma entidade é, a partir do script/console, digitar: Model.new.attributes, entretanto com o gem, o conhecimento dessas informações fica bem mais fácil.
Após instalada (sudo gem install annotate-models), bastar executar o comando annotate na pasta do seu aplicativo. Simples, rápido e quebra um galhão.
Passenger no painel de preferências do Leopard
28/06/2008 — 2 comentários — Tags: mod_rails, railsQue o mod_rails veio para revolucionar o deployment de Rails, todo mundo já sabe. Agora, me deparei com isso:

Como no Locomotive, criaram, com RubyCocoa, um painel para gerenciar suas aplicações. Agora, nem é mais preciso declarar cada aplicação no httpd.conf. Virou brincadeira, né?
Para funcionar, bastar ter Mac OS 10.5.2 e Pessenger 2.0.1 instalados.
Rails, Git, MySQL e mod_rails no Leopard
24/05/2008 — 3 comentários — Tags: git, howto, leopard, mac, mod_rails, mysql, railsComprou um Mac? Não sabe por onde começar? Esse é um mega-post mostrando como configurar Ruby on Rails, Git, MySQL e mod_rails no Leopard. É tudo muito-fácil!
Ruby on Rails
O Leopard já vem com Ruby e Rails já instalados. Então, a única sugestão é a de atualizar todos os gems. O comando gem list deve apontar os gems instalados. Por padrão, são:
Ruby on Rails na caveira!
19/12/2007 — Comente! — Tags: dicas, railsNos últimos dias, tenho lido muita coisa sobre RoR. Infelizmente, queria blogar sobre cada um desses assuntos, mas o tempo anda muito corrido. Fiz esse mega-post com alguns links de assuntos interessantes para aprendizagem.
Introdução
- Ruby on Rails - The basics - um pequeno pdf de caráter beeeem introdutório.
- Ruby on Rails Handbook - uma lista com inúmeros materiais sobre o framework.
- Log Visualizer - apesar do nome Tabajara, essa aplicação gera gráficos e outras firulas dos seus arquivos de log.
- Curso online de Ruby - via Caio Salim no Twitter (por isso que eu gosto desse Twitter).
Locomotive com Rails 2.0
16/12/2007 — Comente! — Tags: locomotive, mac, railsUma das formas simples de se ter Ruby on Rails no Mac é através do Locomotive, um pacote all-in-one com Ruby, Rails e vários gems importantes para desenvolvimento. Como o Rails 2.0 foi lançado no último dia 7, resolvi atualizar minha máquina.
Numa janela do terminal rodei o tradicional gem install rails -y --source http://gems.rubyonrails.org, para atualizar a versão do Rails. Eu indiquei o repositório do site oficial, mas não é obrigatório. Logo em seguida criei minha primeira aplicação com um rails _2.0.1_ teste. O "_2.0.1_" gera o projeto com a estrutura já da nova versão.
Em seguida, adicionei a aplicação teste a lista de aplicações do Locomotive e a iniciei. A aplicação não pode ser inicializada e observando o server.log percebi que ainda faltava atualizar o RubyGems. Assim, rodei um gem update --system e pronto!
Documentação sobre Ruby e seus gems
14/12/2007 — 1 comentário — Tags: dicas, railsUma dica que pouca gente conhece sobre documentação é o gem_server. O comando gem_server inicia na porta 8808 uma instância WEBrick com a listagem de todos os gems instalados na máquina e suas respectivas informações de versão e inclusive documentação. Por ali, é possível obter inclusive todas as informações sobre métodos e classes dos cincos pacotes que integram o Rails. Uma vez startado, para ver o serviço basta carregar a URI localhost:8808 e obter uma página como a abaixo. [Dica via Akita]

Outro comando interessante é o ri. O ri mostra informações de classes, métodos e módulos do Ruby. Por exemplo, para obter informações sobre String, use ri String.
[upgrade] O Ronaldo sugeriu o FastRI, uma alternativa ao ri e que é distribuído como gem. Para instalar basta um simples "gem install fastri" e para usar, qri String.
Um resumo do Minas on Rails
02/12/2007 — 2 comentários — Tags: bh, encontro, minasonrails, railsOntem aconteceu o Minas on Rails. O evento surgiu da idéia do Ronaldo Ferraz e da organização do pessoal da Dito - André, Milk-it - Carlos, Michel e cia, Idéia Digital - Rafael Apocalypse, entre outros. Eu, dei meus pitacos sobre a organização do evento na lista rails-mg. O evento começou com uma alfineta engraçadíssima ao Cake PHP, o Ronaldo ficou blogando ao vivo e o Open Talk final foi descontraído e bacana.