SlideShare a Scribd company logo
1 of 49
Download to read offline
APLICAÇÕES RACK
                               Thiago Bueno Silva




Monday, August 23, 2010
Motivação



                            ?
Monday, August 23, 2010
HTTP

                 Christian Neukirchen (2007)

                  Web = Série de requisições e respostas HTTP.

                          O resto é framework que vai por cima.

                 HTTP é fácil!

                          Requests e Responses



Monday, August 23, 2010
Rack



                 Interface comum de interação
                 entre Webservers e Ruby


Monday, August 23, 2010
OBJETOS RACK
                             Simplicidade extrema




Monday, August 23, 2010
OBJETOS RACK
                                   Simplicidade extrema

                          Deve responder
                           a #call(env)




Monday, August 23, 2010
OBJETOS RACK
                                        Simplicidade extrema

                               Deve responder
                                a #call(env)




                          Status HTTP




Monday, August 23, 2010
OBJETOS RACK
                                        Simplicidade extrema

                               Deve responder
                                a #call(env)
                                                    Content
                                                     type




                          Status HTTP




Monday, August 23, 2010
OBJETOS RACK
                                        Simplicidade extrema

                               Deve responder
                                a #call(env)                   Response
                                                    Content
                                                                 body
                                                     type




                          Status HTTP




Monday, August 23, 2010
OBJETOS RACK
                                        Simplicidade extrema

                               Deve responder
                                a #call(env)                   Response
                                                    Content
                                                                 body
                                                     type




                          Status HTTP




Monday, August 23, 2010
OBJETOS RACK
                                        Simplicidade extrema

                               Deve responder
                                a #call(env)                    Response
                                                    Content
                                                                  body
                                                     type




                          Status HTTP



                                                Servidor Rack




Monday, August 23, 2010
PROCESSOS RACK
                              Minimalismo Extremo!




         run Proc.new {|env| [200, {"Content-
           Type" => "text/html"}, ["Hello
                     world!!"]]}




Monday, August 23, 2010
SERVIDORES RACK




Monday, August 23, 2010
Mongrel
                          CGI      FCGI

                                                        Thin
                                  Webrick




                                SERVIDORES RACK

                                    Phusion Passenger

                          Ebb
                                                                 Unicorn
                                          Fuzed



Monday, August 23, 2010
FRAMEWORKS RACK




Monday, August 23, 2010
Ramaze
                    Camping         Mack

                                                      Maverick
                                    Merb




                             FRAMEWORKS RACK

                                      Ruby on Rails

                          Sinatra
                                                                 Rum
                                           Waves



Monday, August 23, 2010
Distribuição
                          “gem install rack”
                          Handlers                  Middlewares


                                     Especificação


                          Adapters                   Utilitários


                                       Rack
Monday, August 23, 2010
Distribuição


                 Especificação - Rack::Lint

                 Handlers - Webrick, Mongrel, Passenger, Unicorn...

                 Adapters - Rails, Sinatra, Merb, Camping...




Monday, August 23, 2010
Middlewares


                 Componentes genéricos

                 Interceptam requests

                 Manipulam responses




Monday, August 23, 2010
Middlewares




                     Servidor                    Aplicação


                                   Middlewares



Monday, August 23, 2010
I.E. DETECTOR
                              Exemplo Simples




Monday, August 23, 2010
Safari




Monday, August 23, 2010
Internet Explorer




Monday, August 23, 2010
Middlewares


                 Rack::Static

                 Rack::CommonLogger

                 Rack::Reloader

                 Rack::ShowExceptions




Monday, August 23, 2010
Middlewares - rack-contrib


                 Rack::Profiler - Medidor de performance de requests

                 Rack::StaticCache - Caching para arquivos estáticos

                 Rack::Config - Configurações compartilhadas por todos
                 middlewares




Monday, August 23, 2010
Middlewares - coderack.org

                 rack-recaptcha

                 rack-google_analytics

                 Zombie Shotgun

                 Rack::HTML5

                 Rack::Validate



Monday, August 23, 2010
Utilitários


                 Rackup

                      Executa aplicações

                 Builder

                      DSL para construção/configuração




Monday, August 23, 2010
Sinatra
                          Micro-framework Web
                              Não é MVC!
                                Restfull
             Métodos HTTP(GET, POST, PUT e
                       DELETE)




Monday, August 23, 2010
Sinatra



                 Verbos HTTP




Monday, August 23, 2010
Sinatra


                 Mapeamento de
                 padrões



Monday, August 23, 2010
Sinatra
                 Helpers                        Suporte a templates
                                                engines
                 Filters (before, after)
                                                     ERB, HAML,
                 Redirecionamentos                   Erubis, ...
                 Controle de Erro                    SASS, Less, ...
                 Suporte a middlewares

                 Testing frameworks


Monday, August 23, 2010
Aplicações Reais




Monday, August 23, 2010
Aplicações Reais




Monday, August 23, 2010
Aplicações Reais




Monday, August 23, 2010
Aplicações Reais




Monday, August 23, 2010
Aplicações Reais




Monday, August 23, 2010
RAILS E RACK




Monday, August 23, 2010
Rails e Rack


                 Rails 2.3 (Rails Metal)

                 Rails 3 (Merb+Rails)

                 Fácil utilização




Monday, August 23, 2010
Rails e Rack


                 ActionDispatch                Rack::Request    Rack::Response

                          “Rack for Rails”

                 Rackup                        ActionDispatch   ActionDispatch
                                                 ::Request        ::Response
                          ./config.ru




Monday, August 23, 2010
Rails e Rack




Monday, August 23, 2010
Rails e Rack
                                “rake middleware”
                          use Rack::Lock
                          useActionController::Failsafe
                          use Rails::Rack::Metal
                          use ActionController::RewindableInput
                          use ActionController::ParamsParser
                          use Rack::MethodOverride
                          ...

Monday, August 23, 2010
Rails e Rack
                             config/environment.rb
                          # environment.rb

                          # Push Rack::BounceFavicon at the bottom
                          config.middleware.use Rack::BounceFavicon

                          # Add Lifo::Cache after
                          ActiveRecord::QueryCache.
                          # Pass { :page_cache => false } argument
                          to Lifo::Cache.
                          config.middleware.insert_after
                          ActiveRecord::QueryCache,
                          Lifo::Cache, :page_cache => false


Monday, August 23, 2010
Rails Middlewares


                          Server        Middleware   Rails App




Monday, August 23, 2010
Rails Middlewares


                          Server        Rack::Cache   Rails App




                                          Storage



Monday, August 23, 2010
Sinatra + Rails 3
                 ./lib/hello_app.rb




                ./config/routes.rb




Monday, August 23, 2010
Sinatra vs. Rails

                 Fácil aprendizado

                 Prototipação

                 Applicações single-page

                      Redutores de Url, CMS simples, portifolios, blogs, etc...




Monday, August 23, 2010
Sinatra vs. Rails


                 Sem migrações

                 Sem plugins

                 Difícil implementação de aplicações completas




Monday, August 23, 2010
Referências

                 Rack - http://github.com/chneukirchen/rack

                 Rack Middleware - http://railscasts.com/episodes/151-rack-
                 middleware

                 Rack in Rails 3 - http://railscasts.com/episodes/222-rack-in-
                 rails-3

                 Sinatra - http://www.sinatrarb.com



Monday, August 23, 2010
OBRIGADO

                                     @tbueno
                                     tbueno@tbueno.com
                                     tbueno.com


Monday, August 23, 2010

More Related Content

Viewers also liked

Avatar celebrities
Avatar celebritiesAvatar celebrities
Avatar celebrities
Dukey1
 
Servicios Profesionales de Traducción
Servicios Profesionales de TraducciónServicios Profesionales de Traducción
Servicios Profesionales de Traducción
rafaelspain
 
Pasos para ingresar_al_test_final_en_edo
Pasos para ingresar_al_test_final_en_edoPasos para ingresar_al_test_final_en_edo
Pasos para ingresar_al_test_final_en_edo
juliojimenez1
 
2016 Mitel Sales Professional - MiVoice MX-ONE Solutions
2016 Mitel Sales Professional - MiVoice MX-ONE Solutions2016 Mitel Sales Professional - MiVoice MX-ONE Solutions
2016 Mitel Sales Professional - MiVoice MX-ONE Solutions
directorsales
 
Cenários do RS - Finanças Públicas - RS 2020
Cenários do RS - Finanças Públicas - RS 2020Cenários do RS - Finanças Públicas - RS 2020
Cenários do RS - Finanças Públicas - RS 2020
leandro-duarte
 
Grupo6 idi mod6_ti
Grupo6 idi mod6_tiGrupo6 idi mod6_ti
Grupo6 idi mod6_ti
Juliec76
 

Viewers also liked (14)

Relatos de Twitter: Uruguay campeon de la Copa America 2011
Relatos de Twitter: Uruguay campeon de la Copa America 2011Relatos de Twitter: Uruguay campeon de la Copa America 2011
Relatos de Twitter: Uruguay campeon de la Copa America 2011
 
Avatar celebrities
Avatar celebritiesAvatar celebrities
Avatar celebrities
 
Los 5 blogs de cocina que sigue Jaime Castellanos
Los 5 blogs de cocina que sigue Jaime CastellanosLos 5 blogs de cocina que sigue Jaime Castellanos
Los 5 blogs de cocina que sigue Jaime Castellanos
 
Exploraciones innecesarias
Exploraciones innecesariasExploraciones innecesarias
Exploraciones innecesarias
 
Who we are
Who we areWho we are
Who we are
 
Servicios Profesionales de Traducción
Servicios Profesionales de TraducciónServicios Profesionales de Traducción
Servicios Profesionales de Traducción
 
Oracle sql性能量化——基础数据
Oracle sql性能量化——基础数据Oracle sql性能量化——基础数据
Oracle sql性能量化——基础数据
 
Pasos para ingresar_al_test_final_en_edo
Pasos para ingresar_al_test_final_en_edoPasos para ingresar_al_test_final_en_edo
Pasos para ingresar_al_test_final_en_edo
 
2016 Mitel Sales Professional - MiVoice MX-ONE Solutions
2016 Mitel Sales Professional - MiVoice MX-ONE Solutions2016 Mitel Sales Professional - MiVoice MX-ONE Solutions
2016 Mitel Sales Professional - MiVoice MX-ONE Solutions
 
Cenários do RS - Finanças Públicas - RS 2020
Cenários do RS - Finanças Públicas - RS 2020Cenários do RS - Finanças Públicas - RS 2020
Cenários do RS - Finanças Públicas - RS 2020
 
Grupo6 idi mod6_ti
Grupo6 idi mod6_tiGrupo6 idi mod6_ti
Grupo6 idi mod6_ti
 
Presentación kandinsky
Presentación kandinskyPresentación kandinsky
Presentación kandinsky
 
Número 04
Número 04Número 04
Número 04
 
Ação Cruzeiro
Ação CruzeiroAção Cruzeiro
Ação Cruzeiro
 

Aplicações Rack - RS on Rails 2010

  • 1. APLICAÇÕES RACK Thiago Bueno Silva Monday, August 23, 2010
  • 2. Motivação ? Monday, August 23, 2010
  • 3. HTTP Christian Neukirchen (2007) Web = Série de requisições e respostas HTTP. O resto é framework que vai por cima. HTTP é fácil! Requests e Responses Monday, August 23, 2010
  • 4. Rack Interface comum de interação entre Webservers e Ruby Monday, August 23, 2010
  • 5. OBJETOS RACK Simplicidade extrema Monday, August 23, 2010
  • 6. OBJETOS RACK Simplicidade extrema Deve responder a #call(env) Monday, August 23, 2010
  • 7. OBJETOS RACK Simplicidade extrema Deve responder a #call(env) Status HTTP Monday, August 23, 2010
  • 8. OBJETOS RACK Simplicidade extrema Deve responder a #call(env) Content type Status HTTP Monday, August 23, 2010
  • 9. OBJETOS RACK Simplicidade extrema Deve responder a #call(env) Response Content body type Status HTTP Monday, August 23, 2010
  • 10. OBJETOS RACK Simplicidade extrema Deve responder a #call(env) Response Content body type Status HTTP Monday, August 23, 2010
  • 11. OBJETOS RACK Simplicidade extrema Deve responder a #call(env) Response Content body type Status HTTP Servidor Rack Monday, August 23, 2010
  • 12. PROCESSOS RACK Minimalismo Extremo! run Proc.new {|env| [200, {"Content- Type" => "text/html"}, ["Hello world!!"]]} Monday, August 23, 2010
  • 14. Mongrel CGI FCGI Thin Webrick SERVIDORES RACK Phusion Passenger Ebb Unicorn Fuzed Monday, August 23, 2010
  • 16. Ramaze Camping Mack Maverick Merb FRAMEWORKS RACK Ruby on Rails Sinatra Rum Waves Monday, August 23, 2010
  • 17. Distribuição “gem install rack” Handlers Middlewares Especificação Adapters Utilitários Rack Monday, August 23, 2010
  • 18. Distribuição Especificação - Rack::Lint Handlers - Webrick, Mongrel, Passenger, Unicorn... Adapters - Rails, Sinatra, Merb, Camping... Monday, August 23, 2010
  • 19. Middlewares Componentes genéricos Interceptam requests Manipulam responses Monday, August 23, 2010
  • 20. Middlewares Servidor Aplicação Middlewares Monday, August 23, 2010
  • 21. I.E. DETECTOR Exemplo Simples Monday, August 23, 2010
  • 24. Middlewares Rack::Static Rack::CommonLogger Rack::Reloader Rack::ShowExceptions Monday, August 23, 2010
  • 25. Middlewares - rack-contrib Rack::Profiler - Medidor de performance de requests Rack::StaticCache - Caching para arquivos estáticos Rack::Config - Configurações compartilhadas por todos middlewares Monday, August 23, 2010
  • 26. Middlewares - coderack.org rack-recaptcha rack-google_analytics Zombie Shotgun Rack::HTML5 Rack::Validate Monday, August 23, 2010
  • 27. Utilitários Rackup Executa aplicações Builder DSL para construção/configuração Monday, August 23, 2010
  • 28. Sinatra Micro-framework Web Não é MVC! Restfull Métodos HTTP(GET, POST, PUT e DELETE) Monday, August 23, 2010
  • 29. Sinatra Verbos HTTP Monday, August 23, 2010
  • 30. Sinatra Mapeamento de padrões Monday, August 23, 2010
  • 31. Sinatra Helpers Suporte a templates engines Filters (before, after) ERB, HAML, Redirecionamentos Erubis, ... Controle de Erro SASS, Less, ... Suporte a middlewares Testing frameworks Monday, August 23, 2010
  • 37. RAILS E RACK Monday, August 23, 2010
  • 38. Rails e Rack Rails 2.3 (Rails Metal) Rails 3 (Merb+Rails) Fácil utilização Monday, August 23, 2010
  • 39. Rails e Rack ActionDispatch Rack::Request Rack::Response “Rack for Rails” Rackup ActionDispatch ActionDispatch ::Request ::Response ./config.ru Monday, August 23, 2010
  • 40. Rails e Rack Monday, August 23, 2010
  • 41. Rails e Rack “rake middleware” use Rack::Lock useActionController::Failsafe use Rails::Rack::Metal use ActionController::RewindableInput use ActionController::ParamsParser use Rack::MethodOverride ... Monday, August 23, 2010
  • 42. Rails e Rack config/environment.rb # environment.rb # Push Rack::BounceFavicon at the bottom config.middleware.use Rack::BounceFavicon # Add Lifo::Cache after ActiveRecord::QueryCache. # Pass { :page_cache => false } argument to Lifo::Cache. config.middleware.insert_after ActiveRecord::QueryCache, Lifo::Cache, :page_cache => false Monday, August 23, 2010
  • 43. Rails Middlewares Server Middleware Rails App Monday, August 23, 2010
  • 44. Rails Middlewares Server Rack::Cache Rails App Storage Monday, August 23, 2010
  • 45. Sinatra + Rails 3 ./lib/hello_app.rb ./config/routes.rb Monday, August 23, 2010
  • 46. Sinatra vs. Rails Fácil aprendizado Prototipação Applicações single-page Redutores de Url, CMS simples, portifolios, blogs, etc... Monday, August 23, 2010
  • 47. Sinatra vs. Rails Sem migrações Sem plugins Difícil implementação de aplicações completas Monday, August 23, 2010
  • 48. Referências Rack - http://github.com/chneukirchen/rack Rack Middleware - http://railscasts.com/episodes/151-rack- middleware Rack in Rails 3 - http://railscasts.com/episodes/222-rack-in- rails-3 Sinatra - http://www.sinatrarb.com Monday, August 23, 2010
  • 49. OBRIGADO @tbueno tbueno@tbueno.com tbueno.com Monday, August 23, 2010