NOTE: This gem is a work in progress. It does work, but it’s not especially convenient, yet. Better documentation and scripts will follow in time.

NOTE: Currently the gem is only compatible with Rails 2.

Overview

This gem allows users without Internet access to still use your app. It requires that your application can be thought of in the following way:

Your site is broken down into a set of “groups” or “organizations”. Each group has their own distinct set of records, which are editable by only a distinct set of a users. Besides that, there are global records that can only be edited by overall site administrators, though they can possibly be viewed by regular users.

In order to make offline use of your app possible, Offroad will generate an installer bundle, which is an OS-specific executable that can install Ruby, Rails, and also a launcher which controls a local instance of WEBrick and manages imports and exports. The installer and launcher will be visually labelled everywhere with the name of the Rails app itself, making its function obvious to users. This launcher can generate up-mirror files, which are transported on a USB thumbdrive or some other medium to an online system, where they can be uploaded to the main app site. After having done an upload, the user is prompted to download a down-mirror file which contains any changes to the global records, and bring this back to the offline system, which completes the sneakernet round-trip.

Rather than sending all data, only globally accessible records and updates to the app itself are transferred in the down-mirror (except for the first down-mirror, which also contains the initial set of records for the group). Furthermore, the offline version of the app is considered be the absolutely canonical source of that group’s records; really, this is not a “sync”, it’s a “mirror”. This means that no-one on the online site can make changes to an offline group’s records, not even the administrator; this is enforced by Offroad at a low level.