Streamline your Rails 3.1 workflow with asset_sync, Heroku, S3 and Cloudfront

At Rumble Labs we're very passionate about User Interfaces and how they are designed, aesthetically, functionally and technically. For us, good design doesn't just stop at getting something to look good.

High Performance Web Sites

If you haven't already. You need to go right now and read Steve Souders blog about High Performance Web Sites maybe even pick up a copy of his book of the same name.

A lot of the principles outlined in that book are encapsulated within YSlow for Firebug (The Firefox browser extension). Webkit has an equivalent in the developer toolbar called Audits I don't think it's as good.

Rails 3.1 Asset Pipeline

The new Asset Pipeline in Rails is amazing. You can read the current work-in-progress docs by Ryan Big to get the full lowdown. Some highlights:

It's very exciting that now a lot of the principles of High Performance Web Sites are built into Rails through these new conventions.

Using a CDN

For quite some time now, nearly every site we produce has had this process of using a separate static asset host.

Other than the obvious benefits of using a CDN. When used with a service like Heroku you actually dramatically increase the throughput of your web servers (dynos). As they no longer have to be bothered with serving your static assets.

Historically this has been awkward (to say the least) to do when using Heroku. With Rails 3.1 and the new Celadon Cedar stack Heroku will actually execute bundle exec rake assets:precompile on deploy, they've also made the whole environment a lot more flexible as to what can be run. This gave us an idea.

Introducing asset_sync

We've open sourced asset_sync on github and released it as a gem. If you're starting afresh on Rails 3.1 you shouldn't need to do anything else. Otherwise you may want to read this article I wrote on How to Upgrade to Rails 3.1.0 and get the basics working first.

gem 'asset_sync'
        

Once you're ready, to get started we need to add it to our Gemfile

rails g asset_sync:install Generate the Rake task and config file.
        
        config.action_controller.asset_host = 'https://my_bucket.s3.amazonaws.com' Ensure you have set `config.action_controller.asset_host` in **config/environments/production.rb** e.g.
        
        production:
          access_key_id: 'MY_ACCESS_KEY'
          secret_access_key: 'MY_ACCESS_SECRET'
          bucket: 'my_bucket'
          region: 'eu-west-1'
          existing_remote_files: 'delete'
        

Add your Amazon S3 configuration details to config/asset_sync.yml

And that's it! Now when you git push heroku on deploy, your assets will be precompiled and then synced up to your S3 bucket automagically.

Get in Touch

Great! Tell us about it by completing our project planner. Doing so helps us better understand your requirements and in turn we can provide a more helpful response.

Start your project plan now