This post originated from an RSS feed registered with Ruby Buzz
by Robby Russell.
Original Post: Setting Akamai Edge-Control headers with Ruby on Rails
Feed Title: Robby on Rails
Feed URL: http://feeds.feedburner.com/RobbyOnRails
Feed Description: Ruby on Rails development, consulting, and hosting from the trenches...
Several months ago we moved one of our clients over to Akamai’s Content Delivery Network (CDN). Ww were previously using a combination of Amazon S3 and CloudFront with some benefits, but we were finding several key areas of the world were not s covered by Amazon (yet) for asset delivery. Along with that, we really wanted to take advantage of the CDN for more of our HTML content with a lot of complex rules that related to geo-targeting and regionalization of content.
I’ll try to cover those topics in another post, but wanted to share a few tidbits of code that we are using to manage Akamai’s Edge-control caches from within our Rails application.
With Akamai, we’re able to tell their Edge servers whether it should hold on to the response so it can try to avoid an extra request to the origin (aka our Rails application). From Rails, we just added a few helper methods to our controllers so that we can litter our application with various expiration times.
# Sets the headers for Akamai# acceptable formats include:# 1m, 10m, 90m, 2h, 5ddef set_cache_control_for(maxage="20m")headers['Edge-control']="!no-store, max-age=#{maxage}"end
This allows us to do things like:
class ProductsController<ApplicationControllerdef showset_cache_control_for('4h')@product=Product.find(params[:id])endend
Then when Akamai gets a request for http://domain.com/products/20-foo-bar, it’ll try to keep a cached copy around for four hours before it hits our server again.