Sandstone: A Drop-In CMS for Existing Rails Applications

Over the past few months, I've been talking here and there about a project I've been working on - Sandstone. The general idea is that, while Rails makes it easy to build an application quickly, it's unreasonably difficult to integrate two distinct Rails projects - but if you have an e-commerce site, you may have a need for static content that doesn't justify the effort of running an entirely distinct Rails application like Radiant CMS. Sandstone meets this need by providing a drop-in, customizable CMS as a plugin, ready to be installed on any given Rails application. sandstone formation There are a couple of really interesting things about this project. The first is that it's an instance of what we at Viget are calling "resourceful plugins" - that is, plugins that provide a complete set of resources and functionality around them in a specific domain. These plugins are intended to be easy to integrate into any existing Rails application, and to allow for extensive modification and customization without losing the ability to upgrade the core plugin code. That last bit is especially important, since that's where a lot of alternatives fall down - sure, there are plugins out there that add CMS functionality, but once you invest the time in customizing them to your particular project you're wed to the particular version you installed. If a new version comes out with some compelling features, you have to do a lot of work to upgrade. With a resourceful plugin, upgrades are relatively painless. When you install Sandstone, for instance, it copies a series of controllers, models, and views into your app folder so you can tweak them to your heart's desire. The bulk of the core functionality, however, resides in modules defined in the plugin (which are included in the copied files). To upgrade, then, you just update the plugin and leave the copied files alone. The only problems you'll run into are ones where the new version of the plugin adds some significant new functionality (with new controllers, models, and views), but we have a strategy for dealing with that easily, too. The other aspect of the Sandstone project (and our other resourceful plugins) that excites me is the fact that we're open sourcing it. If you're interested, you can grab the current version of Sandstone (so new it doesn't even have a version number!) from If you'd like to contribute, we have Trac set up, so you can open bugs and feature requests and otherwise participate in the process. from GitHub, fork it, and go crazy. We're hoping that Sandstone can help meet the needs of a lot of developers, so we welcome your feedback. image taken by Ozyman; from
Ben Scofield

Posted in Article Category: #Code