The problem with content management systems is that everyone wants something simple - but it also needs to have XYZ feature. And since everyone’s ‘must have’ feature is different than someone else’s ‘must have’, pretty soon you have a giant feature set and everyone is complaining it isn’t simple any more. So for the last ten years, I have been building custom content management systems in a variety of languages. Most recently, I have been building and extending content management systems in Ruby on Rails for Caltech. Because of some specific integration needs, I think that was a good choice for Caltech at the time - and may continue to be because of our installed base (35 groups and counting). However I thought it might be nice, for my personal sites, to evaluate some of the generally available options for modern Rails CMSs.
About two and a half years ago, there was a series of quite insightful blog posts comparing three Rails CMS offerings on a blog named helpfully “Which Ruby CMS Should I Use”. Youssef Chaker decided to build a basic conference registration site with social media features in BrowserCMS, Radiant, and AdvaCMS and blog about his experience. Ironically that site did not use any of the CMSs under evaluation. Instead he used Jekyll - the “blog aware, static site generator” written in ruby. Since I have always maintained (or some might say neglected) my personal web sites using emacs + version control, I may include Jekyll in my evaluation just for fun.
While I may decide that Jekyll is the perfect tool for me, I don’t think it will be a good choice for the project I have in mind: transferring some friends’ professional web sites into a CMS so they can edit them themselves instead of paying a web designer to make simple content updates. Each of them has a current site with some standard content - and then they are linking out to a blog site. Originally I think the blog was intended as a blog. But it evolved into the only place to get new information because it was the only part of the site that the owner could update themself.
With that audience in mind, I am looking for a CMS that is:
- Easy for the end user to update page content. If they change their phone number, they should be able to hop into the admin interface, go to the “Contact” page and change the phone number in 10 minutes or less.
- They should be able to upload new pictures and place them into new or existing pages.
- It should be easy to embed YouTube videos in their pages if they want.
- The blog should function as a basic blog (tags, reverse chronological listings). I am not sure if they will want to take the time to manage comments or not, so the comment feature should do some spam detection OR allow moderation OR be configurable so it can be turned off completely.
- It should be easy for me to transfer their current site design to the new site.
- Easy for me to set up (this is a side project for me). This means it should run a fairly recent version of Rails and not have any particularly exotic dependencies.
- Support for hosting on Heroku would be nice.
- And the CMS should not get in the way of me adding custom features to the site using standard Rails development techniques. I don’t currently envision doing any custom development on these sites but I don’t want to have to move them to something else if we do come up with some cool idea - for example a distance learning tool.
- Similarly, the tool shouldn’t get in the way if we want to integrate a small e-commerce or donations component.
Looking around there are a couple of projects that look interesting. Radiant has stood the test of time but is still under active development. I like RefineryCMS’s engine-based design. I was a big fan of engines back in the Rails 1.1.6 days but gave up on them when it became too difficult to move them forward to Rails 1.2. I was really pleased when the Merb team championed the concept and got them accepted into the Rails 3 rewrite. I am also interested in trying AdvCMS - though I am a little concerned there hasn’t been a new release since I last tried (and failed) to install it.