61
Alternativas a Rails para sitios y servicios web ultraligeros Raúl Murciano Conferencia Rails 2009

Alternativas a Rails para sitios y servicios web ultraligeros

Embed Size (px)

DESCRIPTION

Charla sobre Rack, Rails Metal y Sinatra como alternativas a Rails, presentada en la Conferencia Rails 2009

Citation preview

Page 1: Alternativas a Rails para sitios y  servicios web ultraligeros

Alternativas a Rails para sitios y servicios web ultraligeros

Raúl Murciano Conferencia Rails 2009

Page 2: Alternativas a Rails para sitios y  servicios web ultraligeros

github.com/raul/conferencia_rails_2009

Page 3: Alternativas a Rails para sitios y  servicios web ultraligeros

Quién soy

● Freelance: raul.murciano.net● Consultoría/Formación:● linkedin.com/in/raulmurciano

● Comunidad: spainrb.org - srug.org● github.com/raul● twitter.com/happywebcoder

Page 4: Alternativas a Rails para sitios y  servicios web ultraligeros

Background tecnología

● Java → PHP → Ruby on Rails

● Huyo de la complejidad

● Me encanta el código expresivo y conciso

Page 5: Alternativas a Rails para sitios y  servicios web ultraligeros

I Rails

Page 6: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails aporta muchas cosas

Page 7: Alternativas a Rails para sitios y  servicios web ultraligeros

...pero no hay balas de plata

Page 8: Alternativas a Rails para sitios y  servicios web ultraligeros

...pero no hay balas de plata

Page 9: Alternativas a Rails para sitios y  servicios web ultraligeros

...pero no hay balas de plata

Page 10: Alternativas a Rails para sitios y  servicios web ultraligeros

...pero no hay balas de plata

Page 11: Alternativas a Rails para sitios y  servicios web ultraligeros

...pero no hay balas de plata

Page 12: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Middleware / Metal

Page 13: Alternativas a Rails para sitios y  servicios web ultraligeros

En el capítulo de ayer... “Rails 3: performance & rack integration”

Page 14: Alternativas a Rails para sitios y  servicios web ultraligeros

En el capítulo de ayer... “Rails 3: performance & rack integration”

What the f*ck is Rack?

Page 15: Alternativas a Rails para sitios y  servicios web ultraligeros
Page 16: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack

Page 17: Alternativas a Rails para sitios y  servicios web ultraligeros

Rackenv: { 'PATH_INFO' => '/foo/bar', ... }

[ status_code, headers_hash, content ] call(env)

Page 18: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack: handlers

Page 19: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack: rutas

Page 20: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack: fltros

Page 21: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack: fltros

Page 22: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack: apilando fltros

Page 23: Alternativas a Rails para sitios y  servicios web ultraligeros

Rack: seleccionando fltros

Page 24: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Rack

Page 25: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Middleware

rake middleware muestra la pila de fltros

Page 26: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Middleware

Page 27: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Middleware

Page 28: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Metal

Page 29: Alternativas a Rails para sitios y  servicios web ultraligeros

Rails Metal

Page 30: Alternativas a Rails para sitios y  servicios web ultraligeros

Ecosistema Rack

● Rack::Utils: utilidades para frameworksescape_html, parse_query, …

● Rack::Contrib: componentes RackETags, cookies, profling, …

● Rack::Test

● CodeRack.org

Page 31: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra

Page 32: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra

● Micro framework, 1 ó 2 dependencias: rack, shotgun

● Micro aplicaciones

● Se ejecuta como un script ruby más

Page 33: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: parámetros en las rutas

Page 34: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: parámetro splat

Page 35: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: vistas inline

Page 36: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: vistas infle

Page 37: Alternativas a Rails para sitios y  servicios web ultraligeros

Raul Murciano, Conferencia Rails 2009

Sinatra: vistas separadas

Page 38: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: helpers

Page 39: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: layout

Page 40: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: partials

Page 41: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: REST

Params anidadosPUT, DELETE _method

Page 42: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: fltros

(Aplican a todos, no hay :only ni :except)

Page 43: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: confguración

Page 44: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: gestión de errores

Page 45: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra Rack

Page 46: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: misc

● Sesiones, cookies vía Rack::SessionGotchas ;)

● no usa secret por defecto!● Si guardas un array has de deserializarlo a mano

● Cabeceras, redirecciones● Archivos estáticos, /public● Extensiones

github.com/nesquena/sinatra_more/

Page 47: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: base

Page 48: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra: ejemplos

● Taps: a simple database agnostic import/export app to transfer data to/from a remote database

● Integrity: easy and fun Continuous Integration server

● Panda: Video encoding made easy with AWS

● Hancock: Single Sign On Server

● Shrtr: a link shortener service

● TooPaste: pastie clone

● ...

Page 49: Alternativas a Rails para sitios y  servicios web ultraligeros

Sinatra como Rails Metal

Page 50: Alternativas a Rails para sitios y  servicios web ultraligeros

Rendimiento Rails Metal

Pratik Naik: 1-2ms de diferencia.

DHH: ● “the difference is tiny for regular HTML-based web

application stuff”,● “you shouldn’t jump to metal before Action Controller

has proved itself to be too slow”

tinyurl.com/perf-rails-metal

Page 51: Alternativas a Rails para sitios y  servicios web ultraligeros

Rendimiento Rails/Sinatra/Rack

tinyurl.com/ruby-web-performance

Page 52: Alternativas a Rails para sitios y  servicios web ultraligeros

There are no silver bullets

Page 53: Alternativas a Rails para sitios y  servicios web ultraligeros

There are no silver bullets

...so Use the Best Tool for the Job

Page 54: Alternativas a Rails para sitios y  servicios web ultraligeros

Generadores de contenido estático: ● Jekyll: wiki.github.com/mojombo/jekyll

● Nanoc: nanoc.stoneship.org

● StaticMatic: staticmatic.rubyforge.org

● Webby: webby.rubyforge.org

From Mike Gunderloy: gist.github.com/242751

Use the Best Tool for the Job

Page 55: Alternativas a Rails para sitios y  servicios web ultraligeros

Use the Best Tool for the Job

En mi opinión...

● Usar Rails middleware/metal por rendimiento sólo tiene sentido en casos muy puntuales

● Rails middleware/metal es una buena alternativa a mod_rewrite y similar

Page 56: Alternativas a Rails para sitios y  servicios web ultraligeros

Use the Best Tool for the Job

En mi opinión...

● Rack es un protocolo perfecto, pero es demasiado áspero como framework

● Merece la pena echar un vistazo a Rack::Contrib, Rack::Utils y Rack::Test

Page 57: Alternativas a Rails para sitios y  servicios web ultraligeros

Use the Best Tool for the Job

En mi opinión...● Sinatra != Spaghetti code

github.com/raul/sinatra_template

● Sinatra es muy útil para:● dar interfaz web a un servicio ya existente● webservices a medida● proyectos que se alejan mucho del stack Rails● micro aplicaciones

Page 58: Alternativas a Rails para sitios y  servicios web ultraligeros

Use the Best Tool for the Job

En mi opinión...● Sinatra != Spaghetti code

github.com/raul/sinatra_template

● Sinatra es muy útil para:● dar interfaz web a un servicio ya existente● webservices a medida● proyectos que se alejan mucho del stack Rails● micro aplicaciones

¡¡¡divertirse!!!

Page 59: Alternativas a Rails para sitios y  servicios web ultraligeros

SinatraRails Rack

everybody

Page 60: Alternativas a Rails para sitios y  servicios web ultraligeros

Enlaces

● Rack:

rack.rubyforge.org● Sinatra:

sinatrarb.com● Rails & Rack (Middleware/Metal):

guides.rubyonrails.org/rails_on_rack.html

Page 61: Alternativas a Rails para sitios y  servicios web ultraligeros

Gracias! :)

¿Preguntas?

github.com/raul/conferencia_rails_2009twitter.com/happywebcoder

workingwithrails.com/person/5988-raul-murciano