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

Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Embed Size (px)

Citation preview

Page 1: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

MerbDesenvolvimento Web com Ruby sem Rails

Danilo SatoThoughtWorks UKwww.dtsato.com

Page 2: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Merb?

Page 3: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Rails não escala!

Page 4: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK
Page 5: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Aviso:Eu sou fã de Rails

Page 6: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Lembram?

Page 7: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Não é bem

assim…

Page 8: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

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

Page 9: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Opinião forte• Estrutura da aplicação

Page 10: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 11: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 12: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 13: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 14: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

contexto

Page 16: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

contexto – Competente Contexto é importante, mas sem prioridade

Page 17: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Mas e se quero algo diferente?

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

Page 21: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

• Mongrel + Erb

Page 22: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 23: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 24: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 25: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

×distance_of_time_in_words_to_now

Page 26: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

×distance_of_time_in_words_to_now×auto_link_email_addresses

Page 27: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Flexível• merb-core

Page 29: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 31: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Rápido• Thread-safe

Page 35: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 36: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

A vida fora do Mutex

Page 40: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 41: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

LockRails (dispatcher.rb)

Page 44: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

LockRails (dispatcher.rb)

Page 45: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 46: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 49: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Coisas legais no Merb

Page 52: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Exemplo

Page 54: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

render_deferred• Recebe um bloco que será executado fora do

mutex

Page 55: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

mutex

Page 56: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Rotas Flexíveis• Padrão

Page 58: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Rotas Flexíveis• Padrão• Subdomains

Page 59: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 60: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 61: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 62: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 63: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Estrutura da Aplicação• Padrão

Page 65: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 66: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 67: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Migrar do Rails é fácil

Page 68: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Coisas não tão legais no Merb

Page 69: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Lembram?

Page 70: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Merb??

Page 71: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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 Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 73: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

Conclusão

Page 74: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 75: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

coisas novas

Page 76: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

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

Page 77: Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK

MerbDesenvolvimento Web com Ruby sem Rails

Danilo SatoThoughtWorks UKwww.dtsato.com