Note: I have explored Browser CMS recently. It is quite new CMS or rather it is very new to communities. However, i think it may worth saying something about it as well, so this post has been edited to include BrowserCMS.
If you are looking for CMS in ruby on rails, the most popular ones out there should be Radiant CMS and Refinery CMS. And there is a relative new CMS called Brower CMS. I have spent some time looking into each of them in order to select a CMS for my projects. There is no straight answers telling you which one is better. If you understand all of them, you will know that why I say so. All of them have their own advantage and disadvantage, so which one to choose is really depends on your needs. I will explain the difference between Radiant and Refinery and Browser CMS in this article.
1. Rails and Ruby version support
Radiant: The current Radiant version is 0.9.1. Radiant is using vendor rails, meaning that when you install the Radiant gem, it comes with its own Rails as well. For Radiant 0.9.1, the Rails version is 2.3.8. You can’t change rails version, as it is using vendor rails unless you modify the Radiant source code. However, for Ruby version, Radiant 0.9.1 supports 1.8.6 and 1.8.7. I tried on 1.9.2, it doesn’t work. I managed to fix some compatibility issues, however, there are still more. So I gave up doing that. Future version of Radiant will definitely support Ruby 1.9.2 I believe as there are already some works done in Radiant branches.
Refinery: Refinery is the only popular Rails CMS out there now that supports Rails 3, or officially supports Rails 3. For Ruby, it should be 1.8.6 above. Of course, since Refinery supports Rails 3, so you should use Ruby 1.9.2.
Browser: Supports Rails 3. Highest Rails version 3.0.9 with Ruby 1.9.2.
If you think that you definitely need a CMS that supports Rails 3, then the last two may be the options.
2. Integrate with Existing Rails Project
Radiant: When you create a Radiant project, you will see that the project folder doesn’t comes with an app folder, which means it doesn’t have controllers/models/views, where you can add your custom controllers to create dynamic pages. Even when you add load path to environment.rb, the routes simply won’t be loaded as well. However, the good thing is that Radiant comes with a very powerful extension systems. If you create an extension, you are able to have your own controller/models/views and even routes. Basically, your extension would be loaded like a Rails projects. And there is also where you could put your own custom controller/views etc. That’s to say, if you want to create some dynamic pages that can’t be managed by the CMS, what you should do is package all those pages as an extensions.
Refinery: With Refinery, it is much easier to integrate into existing rails project or the other way round. In Refinery created project, you could see the folder structures still like how a normal Rails should look like. It still have app folder, where it contains controllers, views, models. So you can organize all your customs controllers views inside there, just like a normal Rails project would. Of course, you need to add your routes in routes.rb. That’s why I say Refinery is very easy to integrate into other projects.
BrowserCMS: BrowserCMS created project behaves like normal Rails application with BrowserCMS required as a gem. So if you want to create your own custom controllers/views, it is easy. And you can use existing layouts created in the CMS as well.
3. Multiple Layouts
Here is an important difference it will greatly decide which CMS to use.
Radiant: Radiant has a very flexible structure. It has pages, layouts, snippets. Snippets are those pages or parts that you think that you may reuse in a lot of pages, so you can organize it into snippets, like Rails partials. So in layouts or pages, you can call that snippets easily with Radius Tag.
For the whole site, you can define multiple layouts pages, so different pages can use different layouts file. This is quite important, as you don’t always want every page of a website looks similar.
Refinery: Refinery are quite different in how they organize the pages. In Refinery, the pages are still organized in the Rails way. When I say Rails way, it means that it have one layout file in the views/application where every pages when render are going to use this layout unless specified differently. When you want to modify this layout, there is no way to do so in the admin panel. What you have to do is to use Refinery override command
rake refinery:override view=pages/home
This will create the corresponding view file in your projects app/views/pages/home.html.erb file. Then you can modify the erb files. This is how you can modify the views. So the admin panel is only for you to edit the page content, and change some css. That’s it. If you want to do something like modify layout, you have to be a developer to do it. So the whole site is sharing one layout as well. This is usually a big problem.
BrowserCMS: This is a bit different with the other two CMSs. You are able to create any layouts in the admin panel. And this is layout that you can see exactly in any Rails application because BrowserCMS use erb template system to allow you to create template.
What’s more, you are able to define partials and write partial contents in admin panels! This is extremely powerful. However, with the ability to write ruby code in the template, it has expose a very serious security problem. If someone is able to hack into the password of administrator, he is able to delete the whole file systems in your server and download the whole database.
4. Multisite support
There is an multi site extension for Radiant. I have tested it out and it is still working for Radiant 0.9.1. However, Refinery doesn’t support multi site. BrowerCMS doesn’t support this as well.
5. Admin Panel
BrowserCMS: It is using jQuery in admin panel. However, it has small small layouts issues in IE, and it is best viewed in FF. The browserCMS comes with drag and drop of pages function. However, I tried and find that you can drag and drop the page for one time, if you want to do it again it is not working anymore. This is small issue which may be fixed, however I feel that this is released so I expect everything should be working fine.
When it comes to extensions. Radiant of course has more extensions. Reason being:
1. Radiant has been out much longer than Refinery
2. Radiant’s core library is very light weight. e.g it doesn’t have WYSIWYG or WYMeditors, you have to install extensions. However, Refinery comes with all of them in core. So by using Radiant you must reply a lot on third party extensions. With Refinery, you either reply on the core or rely on yourself.
BroswserCMS and Refinery has very few extensions.
Radiant: Radiant doesn’t come with Version Control for pages. However, there is one extension out there doing this. I tried but it is not working anymore for Radiant 0.9.1. You have to update the extension if you wish to use it.
Refinery: I think it doesn’t have and there is no existing extension does it.
BrowserCMS: It comes with version control for pages and even for files and your custom defined content block! This is really great.
8. CSS/JS editing
Radiant: Radiant manages css/js just like a normal page. So you are able to edit them freely in the admin panels. If you have version control set up, you can apply to css/js files as well.
Refinery and BrowserCMS: It doesn’t support editing css/js in the admin panel. You have to upload as file. This is quite inconvenient sometimes to users. Good thing is that since css/js are organized as files, you can do caching and sprockets to enhance the performance.
The good thing about BrowserCMS is that it comes with workflow. It means that you can configure it so that some users can only edit contents, and it needs to be approved before it can get published. However both Radiant and Refinery doesn’t have it.
On the other hand, Radiant is actually very flexible to extend both in functionality and Admin UI. So we can write a custome work flow for Radiant. However, since workflow comes with BrowserCMS, you have to evaluate if it fits your needs, as it would be very difficult to modify if it doesn’t.
Read the rest of this entry »