Rails in Realtime


Update: We’ve written a complementary post that goes into more depth. Read this first and then check out Rails in Realtime, Part 2.

LayerVault is built using the popular web framework, Ruby on Rails. The framework, at times known for its divisiveness, has allowed LayerVault to grow from a single box to a swarm of machines over the past year. Recently, there has been a wave of great JavaScript-based frameworks that make creating a “realtime” app a cinch. Because LayerVault is a perfect facsimile of a team’s filesystem, having the web interface update immediately is incredibly important. Every ⌘R is two key presses too many. Finder doesn’t require you to refresh every time a file changes, why should a web app? We’re happy with Rails, so transitioning to Meteor, Ember.js or Backbone.js whole hog isn’t the right move for us.

The phrase “realtime” is thrown around about as much as “local” and “disruptive” these days, so the phrase is often ambiguous. For the purposes of this post, a “realtime” app is the following: page refreshes are not required to see the most up-to-date state of information and new information is communicated in tens of milliseconds instead of hundreds or thousands.

This blog post will cover some of the patterns that we use to allow LayerVault customers to never worry about pressing ⌘R. This is all done by using vanilla *.html.erb templates and never rendering any parts of the page using JavaScript. Once a database record is changed, that change appears in <500ms in a customer’s browser.

Read More