Merb

77
Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com

description

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 - PowerPoint PPT Presentation

Transcript of Merb

Page 1: Merb

MerbDesenvolvimento Web com Ruby sem Rails

Danilo SatoThoughtWorks UKwww.dtsato.com

Page 2: Merb

Merb?

Page 3: Merb

Rails não escala!

Page 4: Merb
Page 5: Merb

Aviso:Eu sou fã de Rails

Page 6: Merb

Lembram?

Page 7: Merb

Não é bem

assim…

Page 8: Merb

Rails = Revolução• Mudou a forma de encarar o desenvolvimento

Web• Opinionated:– Testes– Migrations– Convention over Configuration– DRY

Page 9: Merb

Opinião forte• Estrutura da aplicação

Page 10: Merb

Opinião forte• Estrutura da aplicação• MVC

Page 11: Merb

Opinião forte• Estrutura da aplicação• MVC• AJAX: Script.aculo.us / Prototype

Page 12: Merb

Opinião forte• Estrutura da aplicação• MVC• AJAX: Script.aculo.us / Prototype• ORM: ActiveRecord

Page 13: Merb

Opinião forte• Estrutura da aplicação• MVC• AJAX: Script.aculo.us / Prototype• ORM: ActiveRecord• Testes: Test::Unit– unit / functional / integration

Page 14: Merb

Opinião forte• Estrutura da aplicação• MVC• AJAX: Script.aculo.us / Prototype• ORM: ActiveRecord• Testes: Test::Unit– unit / functional / integration

• Mailer/ActiveResource/ActiveSupport/…

Page 15: Merb

Perfeito para Iniciantes• Modelo de Dreyfus:– Iniciante Práticas e Regras independentes de

contexto

Page 16: Merb

Perfeito para Iniciantes• Modelo de Dreyfus:– Iniciante Práticas e Regras independentes de

contexto – Competente Contexto é importante, mas sem prioridade

Page 17: Merb

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

Page 18: Merb

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

Page 19: Merb

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

Page 20: Merb

Mas e se quero algo diferente?

Fugir do padrão é difícil, mas não impossível

Page 21: Merb

Merb• Framework web MVC em Ruby• Desenvolvido pelo Ezra– EngineYard– Brincando com Mongrel Handlers

• Mongrel + Erb

Page 22: Merb

Menos mágica×Symbol.to_proc (&:color)

Page 23: Merb

Menos mágica×Symbol.to_proc (&:color)×returning {}

Page 24: Merb

Menos mágica×Symbol.to_proc (&:color)×returning {}×Active Support:

Page 25: Merb

Menos mágica×Symbol.to_proc (&:color)×returning {}×Active Support:

×distance_of_time_in_words_to_now

Page 26: Merb

Menos mágica×Symbol.to_proc (&:color)×returning {}×Active Support:

×distance_of_time_in_words_to_now×auto_link_email_addresses

Page 27: Merb

Menos mágica×Symbol.to_proc (&:color)×returning {}×Active Support:

×distance_of_time_in_words_to_now×auto_link_email_addresses×cycle

Page 28: Merb

Flexível• merb-core

Page 29: Merb

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

Page 30: Merb

Rack• Ebb• Evented Mongrel• FastCGI• Mongrel• Thin• Webrick

Page 31: Merb

Leve

Rails Merb Core Merb MoreLOC LOC (Testes)

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)

Page 32: Merb

Leve

Rails Merb Core Merb MoreLOC 55393

LOC (Testes) 37639

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)

Page 33: Merb

Leve

Rails Merb Core Merb MoreLOC 55393 5406 1774

LOC (Testes) 37639 4529 1184

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)

Page 34: Merb

Rápido• Thread-safe

Page 35: Merb

Rápido• Thread-safe• Consegue atender requisições sem bloquear

Page 36: Merb

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

Mínimo Média Máximo D.P.

Rails

Merb

Page 37: Merb

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

Mínimo Média Máximo D.P.

Rails 0.0 43.4 75.2 30.8

Merb

Page 38: Merb

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

Mínimo Média Máximo D.P.

Rails 0.0 43.4 75.2 30.8

Merb 0.0 73.3 143.0 65.8

Page 39: Merb

A vida fora do Mutex

Page 40: Merb

O famoso exemplo• Upload de arquivo:– Operação demorada– Rails padrão bloqueia até terminar de responder

Page 41: Merb

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!

Page 42: Merb

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• …

Page 43: Merb

LockRails (dispatcher.rb)

Page 44: Merb

LockRails (dispatcher.rb)

Page 45: Merb

Lock• Rails segura o mutex antes de:– Determinar o roteamento– Atender a requisição

Page 46: Merb

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

Page 47: Merb

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

Page 48: Merb

Lock• Algoritmo de rotas no Merb:– ~ 600 linhas de código complexo– Thread-safe• Não é executado dentro do mutex

Page 49: Merb

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

Page 50: Merb

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

Page 51: Merb

Coisas legais no Merb

Page 52: Merb

Retorno da action flexível• render:– String– Template (formato, status_code, layout)

• redirect• proc:– Libera o mutex e continua executando o bloco

Page 53: Merb

Exemplo

Page 54: Merb

render_deferred• Recebe um bloco que será executado fora do

mutex

Page 55: Merb

render_then_call• Renderiza a String e executa o bloco for a do

mutex

Page 56: Merb

render_chunked• Um bloco que enviará pedaços de dados cada

vez que for chamado

Teste no Firefox para ver os “pedaços” chegando aos poucos

Page 57: Merb

Rotas Flexíveis• Padrão

Page 58: Merb

Rotas Flexíveis• Padrão• Subdomains

Page 59: Merb

Rotas Flexíveis• Padrão• Subdomains• RESTful

Page 60: Merb

Rotas Flexíveis• Padrão• Subdomains• RESTful• Aninhadas

Page 61: Merb

Rotas Flexíveis• Padrão• Subdomains• RESTful• Aninhadas• Regex

Page 62: Merb

Rotas Flexíveis• Padrão• Subdomains• RESTful• Aninhadas• Regex• Ver rotas

Page 63: Merb

Plugins são Gems!– merb_activerecord / merb_datamapper / merb_sequel– merb_helpers– merb_param_protection– merb_stories / merb_test_unit– merb_has_flash– merb-auth / merbful_authentication– merb_paginate– …– http://wiki.merbivore.com/pages/plugins

Page 64: Merb

Estrutura da Aplicação• Padrão

Page 65: Merb

Estrutura da Aplicação• Padrão• Flat

Page 66: Merb

Estrutura da Aplicação• Padrão• Flat• Very Flat

Page 67: Merb

Migrar do Rails é fácil

Page 68: Merb

Coisas não tão legais no Merb

Page 69: Merb

Lembram?

Page 70: Merb

Merb??

Page 71: Merb

Mas…• O código é legível• Documentação está crescendo:– http://www.merbivore.org– http://www.merbunity.com– http://wiki.merbivore.com

• Livros:– http://peepcode.com/products/meet-merb-pdf-draft – http://manning.com/ivey (em breve) – http://merb.4ninjas.org (online - em desenvolvimento)

Page 72: Merb

Imaturo• Ainda não chegou na versão 1.0• Menos tempo de vida• Comunidade menor• Bem menos plugins

Page 73: Merb

Conclusão

Page 74: Merb

Resumo• Merb:– Menos mágica– Flexível– Leve– Rápido– Familiar para quem conhece Rails– Em desenvolvimento…

Page 75: Merb

Rails ou Merb?• Depende • Rails é melhor para iniciantes• Merb é para quem gosta de “brincar” com

coisas novas

Page 76: Merb

Use a ferramenta certa!• Tem muito mais (só em Ruby):– Ramaze– Sinatra– Camping– Nitro– IOWA– …

Page 77: Merb

MerbDesenvolvimento Web com Ruby sem Rails

Danilo SatoThoughtWorks UKwww.dtsato.com