770 likes | 939 Views
Merb. Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com. Merb?. Rails não escala!. . Aviso:. Eu sou fã de Rails. Lembram?. Não é bem assim…. Rails = Revolução. Mudou a forma de encarar o desenvolvimento Web Opinionated: Testes Migrations
E N D
Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com
Aviso: Eu sou fã de Rails
Rails = Revolução • Mudou a forma de encarar o desenvolvimento Web • Opinionated: • Testes • Migrations • Convention over Configuration • DRY
Opinião forte • Estrutura da aplicação
Opinião forte • Estrutura da aplicação • MVC
Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype
Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype • ORM: ActiveRecord
Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype • ORM: ActiveRecord • Testes: Test::Unit • unit / functional / integration
Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype • ORM: ActiveRecord • Testes: Test::Unit • unit / functional / integration • Mailer/ActiveResource/ActiveSupport/…
Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante Práticas e Regras independentes de contexto
Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante Práticas e Regras independentes de contexto • Competente Contexto é importante, mas sem prioridade
Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante Práticas e Regras independentes de contexto • Competente Contexto é importante, mas sem prioridade • Proficiente Contexto interpretado de forma holística
Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante Práticas e Regras independentes de contexto • Competente Contexto é importante, mas sem prioridade • Proficiente Contexto interpretado de forma holística • Expert Decisões baseadas na intuição
Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante Práticas e Regras independentes de contexto • Competente Contexto é importante, mas sem prioridade • Proficiente Contexto interpretado de forma holística • Expert Decisões baseadas na intuição • Mestre Ações sem prestar atenção na consciência
Mas e se quero algo diferente? Fugir do padrão é difícil, mas não impossível
Merb • Framework web MVC em Ruby • Desenvolvido pelo Ezra • EngineYard • Brincando com Mongrel Handlers • Mongrel + Erb
Menos mágica • Symbol.to_proc (&:color)
Menos mágica • Symbol.to_proc (&:color) • returning {}
Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support:
Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support: • distance_of_time_in_words_to_now
Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support: • distance_of_time_in_words_to_now • auto_link_email_addresses
Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support: • distance_of_time_in_words_to_now • auto_link_email_addresses • cycle
Flexível • merb-core
Flexível • merb-core • merb-more • merb-action-args /merb-assets • merb-builder / merb-cache • merb-freezer / merb-gen • merb-haml / merb-mailer • merb-parts / merb-slices
Rack • Ebb • Evented Mongrel • FastCGI • Mongrel • Thin • Webrick
Leve • OBS: • Linhas de Código desconsiderando comentários e linhas em branco • Rails 2.1.0 vs. Merb-0.9.3 • Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)
Leve • OBS: • Linhas de Código desconsiderando comentários e linhas em branco • Rails 2.1.0 vs. Merb-0.9.3 • Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)
Leve • OBS: • Linhas de Código desconsiderando comentários e linhas em branco • Rails 2.1.0 vs. Merb-0.9.3 • Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)
Rápido • Thread-safe
Rápido • Thread-safe • Consegue atender requisições sem bloquear
Rápido • Thread-safe • Consegue atender requisições sem bloquear • “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you
Rápido • Thread-safe • Consegue atender requisições sem bloquear • “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you
Rápido • Thread-safe • Consegue atender requisições sem bloquear • “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you
O famoso exemplo • Upload de arquivo: • Operação demorada • Rails padrão bloqueia até terminar de responder
O famoso exemplo • Upload de arquivo: • Operação demorada • Rails padrão bloqueia até terminar de responder • Isso significa: • Mongrel não responde mais nenhuma requisição!
O famoso exemplo • Upload de arquivo: • Operação demorada • Rails padrão bloqueia até terminar de responder • Isso significa: • Mongrel não responde mais nenhuma requisição! • Soluções: • BackgroundDb • Custom Mongrel Handler • …
Lock Rails (dispatcher.rb)
Lock Rails (dispatcher.rb)
Lock • Rails segura o mutex antes de: • Determinar o roteamento • Atender a requisição
Lock • Rails segura o mutex antes de: • Determinar o roteamento • Atender a requisição • Algoritmo de rotas no Rails: • Não thread-safe • ~ 1100 linhas de código complexo
Lock • Rails segura o mutex antes de: • Determinar o roteamento • Atender a requisição • Algoritmo de rotas no Rails: • Não thread-safe • ~ 1100 linhas de código complexo • ActiveRecord
Lock • Algoritmo de rotas no Merb: • ~ 600 linhas de código complexo • Thread-safe • Não é executado dentro do mutex
Lock • Algoritmo de rotas no Merb: • ~ 600 linhas de código complexo • Thread-safe • Não é executado dentro do mutex • Não acoplado ao ActiveRecord
Lock • Algoritmo de rotas no Merb: • ~ 600 linhas de código complexo • Thread-safe • Não é executado dentro do mutex • Não acoplado ao ActiveRecord