sinatra,
rack &
middleware
This is made “soon after” railsconf, so you’ll just have to deal with the railsconf references
sinatra,
rack &
middleware
Ben Schwarz
@benschwarz
http://github.com/benschwarz
This is made “soon after” railsconf, so you’ll just have to deal with the railsconf references
heres an example of the most simple sinatra application you could probably make. The ‘get’
referrers to the HTTP verb. You should probably recognise this from rails land. The next part
is the “route”, here I’m just mapping the index / root. “erb :index” will render index.erb,
sinatra also has haml support out of the box.
heres an example of the most simple sinatra application you could probably make. The ‘get’
referrers to the HTTP verb. You should probably recognise this from rails land. The next part
is the “route”, here I’m just mapping the index / root. “erb :index” will render index.erb,
sinatra also has haml support out of the box.
heres an example of the most simple sinatra application you could probably make. The ‘get’
referrers to the HTTP verb. You should probably recognise this from rails land. The next part
is the “route”, here I’m just mapping the index / root. “erb :index” will render index.erb,
sinatra also has haml support out of the box.
heres an example of the most simple sinatra application you could probably make. The ‘get’
referrers to the HTTP verb. You should probably recognise this from rails land. The next part
is the “route”, here I’m just mapping the index / root. “erb :index” will render index.erb,
sinatra also has haml support out of the box.
a ‘post’ example. you might notice the params hash is nothing new if you’ve come from rails
land.
a ‘post’ example. you might notice the params hash is nothing new if you’ve come from rails
land.
a ‘post’ example. you might notice the params hash is nothing new if you’ve come from rails
land.
a ‘post’ example. you might notice the params hash is nothing new if you’ve come from rails
land.
a slightly more advanced example. Here I create a mime type of :json and use before (read:
like before_filter) to set the :json content type before all routes. The .to_json method isn’t
Sinatra magic. In this case it comes from using datamappers’ aggrigates plugin, activerecord
of course has this built in.
a slightly more advanced example. Here I create a mime type of :json and use before (read:
like before_filter) to set the :json content type before all routes. The .to_json method isn’t
Sinatra magic. In this case it comes from using datamappers’ aggrigates plugin, activerecord
of course has this built in.
a slightly more advanced example. Here I create a mime type of :json and use before (read:
like before_filter) to set the :json content type before all routes. The .to_json method isn’t
Sinatra magic. In this case it comes from using datamappers’ aggrigates plugin, activerecord
of course has this built in.
a slightly more advanced example. Here I create a mime type of :json and use before (read:
like before_filter) to set the :json content type before all routes. The .to_json method isn’t
Sinatra magic. In this case it comes from using datamappers’ aggrigates plugin, activerecord
of course has this built in.
a slightly more advanced example. Here I create a mime type of :json and use before (read:
like before_filter) to set the :json content type before all routes. The .to_json method isn’t
Sinatra magic. In this case it comes from using datamappers’ aggrigates plugin, activerecord
of course has this built in.
a slightly more advanced example. Here I create a mime type of :json and use before (read:
like before_filter) to set the :json content type before all routes. The .to_json method isn’t
Sinatra magic. In this case it comes from using datamappers’ aggrigates plugin, activerecord
of course has this built in.
This is called “Classic”
Sinatra application style
This means that the get and post (read: your application) is defined at the top level
Apps can also be defined in another way.
Modular apps are defined within their own namespace / class.
They inherit from Sinatra::Base
Apps can also be defined in another way.
Modular apps are defined within their own namespace / class.
They inherit from Sinatra::Base
Thats a “Modular”
Sinatra application
I’ll get into modular apps a little more later
Running it
So by now, if you’re unfamiliar with rack or sinatra you’ll might be thinking, “but we just got
passenger, ruby hosting has only now become ‘easy’”
you could use the `rackup` command, but instead you should use ‘shotgun’ by Ryan
Tomayko, it handles application reloading (which is not present within the sinatra codebase)
Ever wondered what Ryan Tomayko
looks like at 8 am after a huge
fucking bender in “old” vegas?
Not much earlier (5am) Ryan sent his wife an email saying “Melbourne, we’re going”. She
called in the morning to find out if he was mid-way across the pacific or not.
So thats all your hits, misses and basic stats to tell you what the hell your memcached
instances are doing. If they’re getting smashed. Etc. I know iseekgolf, a large australian
golfing website have used it, along with some engineyard customers. github and flickr also
checked it out which was pretty cool. Amnesia was a 2 session application, one for
implementation, the next to add the graphs etc. I think I spent about 5 hours total on it.
Munch
Recipes from websites re-represented
I showed this last month, its pretty simple so I’ll gloss over it.
Reverse proxy
Like Squid or Varnish, but small and simple
It’ll set correct http headers. Thats really important. The main basis of this is that your
application pages can be cached by rack::cache and stop requests from even having to hit
your ruby process.
JSON-P
Json-p is for when you want to get callbacks for your json / ajax requests from your server.
The data will be returned wrapped within a callback method. This can make writing a
javascript based interface much faster and easier to implement.
so instead of getting some result like we did earlier, a raw javascript / json “string” in the
browser that needs to be eval’d and looked after
you can get it back like this, it calls your method and can be handled more cleanly
JSON-P
part of rack-contrib
Json-p is for when you want to get callbacks for your json / ajax requests from your server.
The data will be returned wrapped within a callback method. This can make writing a
javascript based interface much faster and easier to implement.
A REAL implementation
of single-sign-on
Engine yard are using this internally and I really suggest that you read the code. There are
some videos available online and it stands as the best example of sinatra based rack
middleware. Hancock was the only real implementation of a sinatra based rack middleware
that he sinatra committers could point me at. I used it as a basis for learning how to pack
postie together.
Thanks
http://sinatrarb.com
http://twitter.com/bmizerany
http://twitter.com/rtomayko
http://github.com/benschwarz/amnesia
http://github.com/benschwarz/munch
http://github.com/benschwarz/postie
http://github.com/rtomayko/shotgun
http://github.com/rack/rack-contrib
http://github.com/atmos/hancock/tree/master
http://github.com/atmos/hancock-client/tree/master
http://en.wikipedia.org/wiki/Single_sign-on
Special Thanks to Blake and Ryan for being good sports.