The Next Step: Plug-in

By Darryl K. Taft  |  Posted 2008-07-15

Google Gears Takes Ruby on Rails Offline

Developers are putting Google Gears to some interesting uses, including offline support for Ruby on Rails and building client-side search engines.

Gears for Rails represents another boost to cloud computing in its ability to deliver offline capability and synchronization. Meanwhile, Microsoft is leading its own data synchronization charge with its Live Mesh cloud-based data synchronization system, a test build of which is now open to the public.

However, Google has pushed its way into the cloud-based development world. And the third-party Gears for Rails solution also represents another call for Google to open up its Google App Engine platform to other languages, such as Ruby. Currently, the Google App Engine development platform supports Python only.

Michael Marcus and Rui Ma, two recent graduates from the information systems masters program at New York University, have designed a development framework called Gears on Rails. Google Gears is an open-source browser extension that lets developers create Web applications that can run offline. Gears on Rails is an open-source project that plugs Google Gears into Ruby on Rails, enabling developers to take a Ruby on Rails code base offline.

In a blog post about the project, Dion Almaer, a Google engineer, said, "Gears on Rails helps developers to write fully offline functional Web applications based on Gears without learning a bit of Gears ... The sweet spot is building a Rails application that can handle local interactions without having to drop down to Gears JavaScript APIs themselves."

Almaer also did an interview with Marcus and Ma in which Ma described Gears on Rails as a proof-of-concept project whose goal is "to let developers build the offline version of their Web site without having to know anything about Gears or even to learn new techniques."

To enable this, the duo did two key things, said Marcus in the podcast of the Gears on Rails team's interview. "We tried to do as much native Rails code as possible to frame the JavaScript portion of Gears," he said. "And on the JavaScript side we've created an API that looks syntactically a lot like Ruby, so that the JavaScript that developers do need to write is very comfortable for them and something they can learn very easily."

Developers using Gears on Rails need not worry about the data synchronization between the server and the clients or about database schema updates, Ma said. "Because our framework takes care of underlying technologies like database synchronization and the generation of Google Gears manifest file ... developers only need to write Ruby-like JavaScript and they follow the same development experience as if they were using Ruby on Rails," Ma said.

The team built a mechanism that detects the current status of the environment-whether online or offline-"so our framework can switch from the online to the offline version," Ma said.

Gears on Rails takes advantage of the REST (Representation State Transfer) capabilities of Rails "without building any additional pieces on the server side to actually do the synchronization," Marcus said.

"What we're asking developers to do is write local versions of their controllers and views..." he said. "So you're basically doing the exact same thing in JavaScript on the local side that you're doing in Ruby on the server side."

Marcus also said Gears on Rails makes use of a framework called Jester that "allows you to do RESTful calls through JavaScript. That's what we built on, the notion that you can create, edit and destroy records on a database through JavaScript."

The Next Step: Plug-in

The team's next step is to get the technology "into a fully formed plug-in that can be used with any Rails app," Marcus said.

"And to make it more open-source-friendly," Ma said.

"That sounds like a great idea," David Heinemeier Hansson, the creator of Ruby on Rails, wrote in response to questions about the Gears on Rails project. "I don't personally have that great of an interest in offline Web applications, but this stuff would be super for those who do. While it's probably a small fraction of developers out there who'll bother to make offline-capable applications, it doesn't mean that it's not important for those who do need it. However small a percentage that may be."

Brad Neuberg, an engineer on the Google Gears team, has developed PubTools Search, which is "an open-source JavaScript library that drops a client-side search engine right into your page," Neuberg said in an article he wrote about the project.

Neuberg used Google Gears and the Dojo Toolkit to create the client-side search engine. However, "PubTools Search is not an official Google project or Gears API; it is a project I created on my own to teach and help developers," he said.

In the introduction to his article on PubTools Search, Neuberg said, "Did you know that you can use Gears to do fast, client-side searching of data, similar to a client-side search engine? Gears bundles Full-Text Search (FTS) abilities right into its local, SQLite database. MySpace, for example, uses this feature with their MySpace Mail application, downloading all of a user's messages for fast, client-side search. Because all of the data is local, you can do nifty things like search over the data in real time as the user types, something that is much harder if you have to query over the network to a server to do the searching."

Rocket Fuel