By Deane Barker | November 29, 2012 | 34 Comments
I’ve been talking to people lately about why there are so few CMS in either Rails (Ruby) or Django (Python). There certainly are a few, but I spend more time looking at content management than most people, and I can think of only four offhand (meaning, without using Google):Plone in this list, but that isn’t Django, and is frankly so it’s own thing, that a more accurate comparison might be Zope to Django. Which raises the question, why aren’t there more CMS built on Zope?)
I’d wager that the number of installs of these systems would be dwarfed by the number of one-off, custom-built CMS implemented in Rails or Django. Put another way, Rails or Django shops are much more likely to roll their own CMS than ever use a “boxed” CMS.
Why is this?
I’m convinced it’s because for many developers, a CMS is seen as little more than a bootstrapper. It’s a system to get you up and running without having to re-implement the major subsystems that a CMS provides. In return for using an existing system, you get:
- A philosophy and methodology for content modeling
- A permissions model
- A versioning system
- A delivery mechanism
- A system to render content through templates
In this sense, Rails and Django provide many of the core building blocks of a CMS, they’re just waiting for someone to bolt them together. A Rail/Django project is a bit of a shapeless mass at first, but if you tell it to be a CMS, it would re-arrange itself pretty easily to turn itself into one.
Shops who use Rails or Django are much likely to simply develop code libraries to provide the functionality necessary to a CMS and them drop those in on a per-project basis. This code may never see the outside of their organization, and it certainly never gets marketed as an installable, usable thing. If it does, it lacks the sexiness of a full-blown CMS, so doesn’t get much traction outside their respective developer communities.
But, you might ask, what about PHP frameworks like CodeIgniter, Symfony, or CakePHP? And .Net frameworks like ASP.Net MVC, Monorail (admittedly not that new), and Entity Framework? They provide the same level of functionality as Rails and Django, but there are still massive CMS communities for those platforms. Right?
But, remember that those frameworks are late to the game. PHP and ASP.Net existed long before any frameworks were ever developed for those platforms. Developers were struggling with basic MVC tasks in PHP for almost a decade before Rails came along in 2003 and raised the bar for everyone. Remember, Drupal and Joomla have been around since 2001 (Joomla was Mambo back then); WordPress since just before Rails came out in 2003.
For both Python and Ruby, they were both “ported” to the web using frameworks that were more or less accepted as the standard for their communities.
On the Ruby side, there has never been any serious competitor to Rails. In fact, “Ruby” and “Rails” are largely synonymous to web developers. The only seriously competing framework – Merb – was absorbed into Rails in 2008. The only other Ruby framework that comes to mind is Sinatra (admittedly, however, I’m not a Ruby hacker, by any stretch).
On the Python side, it’s a little less clear, but, still, the first time I saw Python on the web was in TurboGears – I never knew Python as a “raw” web language. Today, you have some other smaller frameworks like Pyramid (which I hear is wonderful) and CherryPy, but the space is dominated by Django.
So both Python and Ruby have always been known on the web as languages used in the context of some framework which bootstraps the way around many of the problems people turn to CMS to resolve. Thus, these frameworks are often used in place of a CMS.
To take it one step further, I’ll toss this out –
The existence and competence of Rails and Django have prevented a serious, shared CMS ecosystem from developing around either Ruby or Python. Since their respective frameworks provide so much functionality out-of-the-box, developers in those languages have never had to generate critical mass around a CMS. They just keep happily rolling their CMS “from scratch” (in quotes because nothing in Rails in Django is really done from scratch…) and in relative isolation, without having to productize much of anything for use in future projects.
(Conversely, has the advent of competent frameworks for all languages slowed new CMS development? Think about it – what CMS has been released recently that has made a big splash on the industry? Silverstripe has been the new hotness in the LAMP world for a couple of years, and I hear about Concrete5 a little. My own favorite open-source newcomer – ProcessWire – is still way under the radar. The fact is, new entrants are more and more rare.)
Let’s go further –
Do we owe the existence of Drupal to the crappiness of PHP, especially the early versions of PHP? Same on the ASP.Net side – if ASP.Net 1.1 was better, would we even have Ektron? (Of course, the first version of Ektron was built on ColdFusion, but the same principle applies there too. ColdFusion has had a fair amount of frameworks over the years, but I’d wager they’re used in a vast minority of projects.)
At the end of the day, were CMS developed to paper over shortcomings in various programming environments?
Rails and Django have been fantastic frameworks right from the start. They benefited from not being first movers – they were created later in the evolution the web, so they were able to see the problems in other languages and correct them. Because of this, they obviate many of the problems we tried to fix by making CMS, especially a decade ago.
And because of that, we’ll never see a lot of boxed, re-usable CMS made with either of them.
In short, why are Rails and Django CMS so rare? Because those guys have never really needed one.
Another up and comer in the ROR CMS world is BrowserCMS (http://www.browsercms.org/).
You forgot to mention Plone and Locomotive, but nonetheless I completely agree. The framework dev’s I have met all prefer to have more control over their systems, which is why I believe they choose Frameworks over CMS’s.
You forgot to mention Plone
I updated the post, but it’s not quite that simple. (Never heard of Locomotive, BTW.)
Assuming that your conclusion is right, this also highlights that mosts/all CMS systems are created and/or driven by developer needs rather than user needs, which I also think is an interesting discussion. I think that this might also be the answer to the question why CMS systems has not changed that much over the years.
I think one of the reasons that the Rails vs CMS false dichotomy keeps cropping up is that yes, Rails is an excellent framework out of the box but also most CMSs set a very low bar for what is considered a good CMS.
I spent quite a few years adding in CMS-style functionality on a per-project basis (using Rails) because the CMS alternatives (Rails and non-Rails) were pretty awful.
However a decent CMS provides a lot over going the custom route. For one, you save a lot of time that would have been spent wiring up your custom CMS. A good CMS also provides a solid foundation to grow your own site-specific functionality, as well as a user interface you would feel comfortable putting in front of a client (oh my the UX horrors I have seen with custom-built CMSs).
So I threw my hat into the ring with Wheelhouse CMS, a Rails CMS that can run within an existing Rails project or standalone. My clients love it and in my admittedly biased opinion it provides a development experience better than anything else out there.
We use etianen-cms for all of our Django projects, it’s very well featured.
Well said! In node.js, there is a good CMS called calipso, and it is definitely a good code base to learn from, if not use it for production purposes.
Some efforts are being made now to convert it into an application framework using concept called privateThemes, i.e. you can start off with a full framework such as themes support, good user creation/handling, tagging etc.
Since I started working in Rails, I’ve thought of Refinery as being a bigger CMS project in the Rails world than any of those mentioned so far: http://refinerycms.com/
Worth giving Mezzanine a mention – http://mezzanine.jupo.org
According to http://www.djangopackages.com/grids/g/cms/ it’s the most downloaded CMS for Django.
It depends of what type of sites you are developing. I also agree that the most developers have specific needs and philosophy of what it is necessary for a bootstrapped app and they can easily develop their own “CMS”.
For example, mine bootstrapped app is here https://github.com/johndel/Rails-Simple-CMS and I am pretty much ok with what it does for starting a prototype.
Maybe you should have used Google before making a stance like:
“The existence and competence of Rails and Django have prevented a serious, shared CMS ecosystem from developing around either Ruby or Python.”
I build sites with Rails, and anywhere from 70%-90% of all of the functionality that many users want are already covered by Ruby and Rails gems. Every site I build is like a run through a buffet of tools, frameworks, and CMS’s that turn weeks into days and days into hours.
All you had to do was google for this and find a site like, say, “The Ruby Toolbox” that would have changed your blog post in a second:
How many CMS’s are on that page, and where are the ones that you know of “without googling?”
But you do bring up a point when you said “Because those guys have never really needed one.” It’s not that they don’t need one, trust me. In my experience dealing with developers, many would rather build-their-own than use a pre-built tool that does the work for them. They’ll make up some reason why the tool “won’t work” and then they’ll spend productive time redesigning the wheel.
While you make some interesting points around programming there is one big assumption that was made. That the use of CMS is about programming things.
Many people who use a CMS are not programmers. There are Personas (if you are familiar with agile/scrum) who are non-developers. Many of these people are in the long tail of sites. Organizations who don’t have lots of money for developers.
Then there is the ease of installation for something based on a language. PHP is widely available on cheap hosting. This can work for small organizations.
This is just one example of a different personas/assumption from the post. There are others. This discussion is more complicated than it often appears on the surface.
Just a small correction: Entity Framework is not a framework. It’s an ORM. That would be like calling Active Record a framework.
I’ve developed software using both CMS (drupal) and frameworks (symfony). What you states here is true for developers, but things changes in the eyes of the user / client: good CMS exists to assist the user, good frameworks help the developer.
If you try to replicate the whole CMS’ UI that lets user edit his own custom entities metadata (think about drupal CCK) plus a graphical query builder UI (ie. drupal VIEWS) you end up with a lot of works, even using Django or Rails. It’s all about the UI, not about the programming language. It’s true you can do everything programmatically, but your client can’t.
I build sites with Rails, and anywhere from 70%-90% of all of the functionality that many users want are already covered by Ruby and Rails gems.
Yes, exactly. The “ecosystem” I was referring to were boxed CMS products. In the Ruby/Python world, you don’t get those — you get libraries, which work better for those communities.
I suggest you check out Mezzanine, built on Django. It’s really the best-of-breed Django CMS, right now. I find it far better, and more actively developed, than the actual “Django CMS”.
Perhaps a more crucial reason: most consumer/small business level web hosting companies do not support Django or Rails. If you want a web application such as a CMS to target as many users as possible (including non-programmers), PHP and MySQL (and old versions of PHP and MySQL at that) are pretty much your only realistic choice.
Going higher up the scale, if you want to support large enterprises, it’s either .NET or Java, since they have to cater for procurement policies that very often don’t include developers in the discussion.
Great article. I was just having a discussion about this with my fellow colleague today about blogging platforms on django (as opposed to CMS but really the points are the same)
As Gilrain mentioned, by Mezzanine is by far the most ‘complete’ CMS for Django out there that exists.
Here’s the interesting thing about Mezzanine (and other seemingly monolithic Django frameworks), they are all made up of smaller apps. James Bennet of the Django fame has a good article on this http://www.b-list.org/weblog/2007/nov/29/django-blog/. Although the context is different (blog vs cms), the principles hold through.
All moving parts of a CMS or blogging app can be broken down into little reusable apps on its own that can be plugged and played to the whims and fancies of the developer. This gives the developer great power to adapt these apps as a starting point and tweak it according to the use case. One of the major complaints of the Joomla/Drupal paradigm is that: its my way or the highway. Trying to tweak a drupal/joomla framework to fit your needs can be a bloody nightmare if you can find a plugin that just works due to the tight coupling of all the dependencies.
Entity Framework is not a framework. It’s an ORM. That would be like calling Active Record a framework.
Yeah, I was really referring to the combination of EF and ASP.Net MVC.
well, there are actually so many Django CMSs that they even dedicated a whole page to them: https://code.djangoproject.com/wiki/CMSAppsComparison
A CMS is built to enable non tech users to manage web content. Those people could care less about the underlying technology. The reason so many CMS are built on PHP is due to the fact that php hosting is so easy and a PHP CMS can run anywhere. Python and Ruby are late to the game. PHP had a head start. and to your point about MVC framweorks, Codeigniter came out at the same time as Rails. Asp.Net MVC was late to the game. but PHP had had MVC frameworks as long as Ruby has had Rails.
I think one thing that Rails brings to the table is the ability to not be constrained by some existing data model(s). So, you can easily spin up a new Rails app, add some biz logic in some models and then add a “CMS” around those models with something like the ActiveAdmin gem (http://activeadmin.info)
Great article. I will counterpoint that the scarcity of Rails/Django CMSs is less of a factor of the languages/frameworks themselves and more on the demand for a content management system. The popularity of social networks (facebook pages) and SaaS providers (squarespace, tumblr, posterous) have made CMSs a commodity. If a small-medium business wants a CMS, they can easily turn to one of these avenues and gain much more traction over standing up there own solution. I agree Rails/Django make building content management needs more easily without a specific CMS framework, I really think it is more about the sign of the times. CMS is passe.
I guess I’m the odd one here, I really enjoy having a CMS built on top of a CMS. It allows me to fly through the repetitive & boring CMS type parts that I’d never have the budget to do well as a one off, while still being able to do the cool features that end up landing me the gig. I never liked building new features on wp & drupal, there’s just a lot of overhead and clicking involved.
My preference is http://apostrophenow.org build on top of Symfony 1.4. It’s also contextual, has an outstanding media gallery, & the best content versioning I’ve ever seen, which really sets it apart during sales presentations. I also have total confidence that I can knock out any custom feature using Sf1.4
Also good comments on this post, I’ve got a lot of links to read :)
I actually work pretty frequently in browsercms, and I think a lot of the points above are pretty valid, but I think this speaks to the challenges of writing any cms. Its a balance of allowing extensibility vs the benefit of a prebuilt solution. Browsercms is essentially designed to be a lightweight layer to expedite a product release. I don’t argue that a development shop can put together their own cms in rails or django, this is totally true and whats great about the frameworks, but depending on how customized it needs to be snapping in a gem thats prebuilt and highly customizable is a pretty nice solution.
I guess my big argument is we could say the same thing about any gem. Why is there a gem for recaptcha when a rails dev could implement it themselves pretty easily? Because that implementation might take X times the amount of time.
Excellent read and completely on point. We simply don’t need one. A parallel theory is that the other languages/frameworks attract more non-developers? Thereby increasing the demand for pre-built CMS systems?
Agree with gilrain: Mezzanine is a pleasure. Good balance of minimalism with extensibility.
I suspect the “roll your own CMS” is possibly the predominant model in Rails-land. There certainly isn’t a Drupal equivalent for Rails, but Drupal, Joomla, etc seem an awfully lot like kitchen-sink solutions. Great feature sets, but way too much for most applications. Having something simple – including the Rails-based CMS like Wheelhouse mentioned above – that you can build on as you need has more appeal for many devs.
Blogged about this myself a while ago, if anyone’s interested:
I would like to see the life cycle of one of these sites.
A medium interactive agency is going to have say a hand full of developers. I would venture a guess and say that most will stick around for 3 years before they move on ( the creative types are kind of transient ).
When you have a bunch of roll your own sites out there as things evolve, staff changes and clients request updates I would suspect it becomes harder and harder to update and maintain these sites.
You might not have the building blocks of a CMS but you certainly end up with individual or cultural building blocks that evolve.
An Open Source CMS will more or less remain the same no matter who is developing or managing the site.
I also think that most of the roll your own sites are going to be hosted by the company who made it since setup on multiple environments would not be ideal.
As bad as PHP might be to some, Its ease of install cant be beat with .Net, Ruby, or Django.
I have not worked with a roll your own CMS but I am not sure I could justify the time spent rebuilding the wheel for most of the cases.
I suspect that the “there is a lot of cheap PHP hosting” is going to start being a detriment.
I don’t WANT to run a server or manage more of a stack than I have to – so I’m increasingly wanting to have the ability to host on a PaaS like Heroku. Python or Ruby-based apps are the main ones that are built to be able to run in this way.
The other trend, although mainly for smaller sites at the moment, is towards static site generators, where you’re hosting flat HTML files.
There are dozens if not hundreds of CMSes (CMSen?) built on Rails. I can’t keep track of them all and I’m not going to try to look up their names. Most of the one’s I’ve heard of have probably all died off.
But maybe you mean a long running CMS platform with a large community?
You might have something there, but as someone else pointed out, Rails (and especially Django) were late comers to the market. Most CMS communities were long established before these frameworks took off. I’d agree that a generating framework provides many of the things a CMS does, so if you’re just going for a brochure and you’re not handy with HTML, you might choose that route. I’ve even called Django a CMS before, because its main use is to generate admin pages for content.
But I think the real reason is architectural. Until quite recently, it was very difficult to host Ruby or Python. You’d either have to be a technical expert, or pay a lot of money. It still takes a certain amount of savvy to host a Rails or Django app, and you’re not likely to try unless you commonly work in those frameworks already.
A great cms brings much more than a bit of boilerplate that can be quickly replicated by a skilled developer in a few days. UX of the admin screens, a plugin / extensions system & community, an shared knowledge & documentation outside of the agency developing the site. In rails, refinery is the most popular and seems like a great little project but is not as powerful as something like silverstripe or Drupal , or even wordpress. The lack of a great cms holds ruby adoption back for sure.
Great article. I’m using Umbraco (http://www.umbraco.com) as a CMS. Umbraco is build on .NET technology and has recently made the move to Asp.Net MVC. The reason I love this Web CMS so much, is that it is a developer framework that gives the developer complete control on the generated markup and complete freedom over extending the framework. I can build my Umbraco websites around the requests of my users, and not the other way around. On the other hand, for the users, its one of the most userfriendly CMS’es I know of. You can be very specific on which functionality a content editor has access to. This way you can make the Backend system completely ‘idiot-proof’. That said, I’m currently dipping my toes into RoR because it’s fun, but also because of the main theme of this article, to build a web application without bootstrapping from a Web CMS framework.
Your article Why Django and Rails CMS Are So Rare write very well, thank you share!