Refinery CMS Review

by Dan DeMeyere - @dandemeyere

If you're looking to try out Refinery CMS for your app, there are a couple of things you should know ahead of time. If there is anything I don't cover in this review, shoot an email to dan[at]thredup.com and I'll see what I can do.

Background

Refinery is a Rails 3 compatible CMS gem that allows users to perform the standard Content Management System (CMS) tasks - create, edit and manage content on a website. However, given its Rails nature, Refinery is capable of much more than this. Refinery was developed in a way to allow 'engines' to be seamlessly integrated into the Refinery app.

To take a step back for a moment, Refinery can be used in many different ways. For example, if you have a large pre-existing app, such as thredUP, Refinery can be used/integrated to serve up all your public facing content such as your help section, press releases, or any other content you might want non-developers to edit. I think this type of application of Refinery is using the CMS in the traditional way. Another way of using Refinery is using it as the founding architecture of a whole separate app. This is what we did with the Daily Thred, which is a good transition point back to using engines within Refinery.

The analogy I use for engines is that they are to Refinery as gems are to Ruby on Rails. Engines tap into the existing infrastructure of your app and typically extend or add new functionality. You can use pre-existing open sourced engines or you can build your own engines to mold Refinery into your project's necessities. This open, modular approach has turned me into a Refinery proponent.

Installation

It's easy. I went from gem install to posting my first page in about 5 minutes. Refinery has a great guides section of their website dedicated to getting all the essential components one might need setup. Here's a look at my Gemfile and the custom gems we ended up choosing:

Pros

  • It's free and open source (thanks open source community!)
  • It's easy to install, configure and extend
  • Decent documentation and the guides are adequate
  • Needed urgent help once and their IRC channel came through for me
  • Readily updated (last commit was less than a day ago)
  • Really easy to style
  • Engine list is growing

Cons

  • No post scheduling - had to create myself
  • No easy previewing - had to re-write the system
  • Any changes to system require overriding files (not sure how else I would do it though)
  • Image storage implementation is ambiguous

Conclusion

It's open source, so there's not much more you can ask for. If you do want something that's not there, fork it and do it yourself - the beauty of open source:)

As you can tell the pros definitely outweigh the cons and therefore I recommend Refinery and hope others start to pick it up as the community will grow and more engines will be available. If you want to try it out, here is their github and here are the creators.

Dan DeMeyere
Ruby on Rails and Front-end Engineer
dan@thredup.com

Transitioning from Newbie to Novice

I'm at the point in my development of Ruby on Rails learning where the grace period of being a beginner has worn off and it's time for me to transition to an intelligent Rails developer. I need to start engineering my mind to look for the elegant solution at the beginning of the project as opposed to looking back on my code at the end and wondering how I could have done it better. I believe the development community uses the expression 'cut my teeth' to describe this chapter of professional development for a developer. I believe the first step is to admit that there will be many roadblocks along the way where I will become frustrated with wrapping my head around certain concepts and humbled by discovering how much I have yet to learn. I plan to catalog the roadblocks I encounter on this blog as a way for other Rails developers to hopefully learn from my mistakes.

My new priority will be stepping back and opening my mind to tackle problems with the new tools I have been learning. I'm going to go after projects that I have no idea how to do and instead of looking for a block of code on Google to solve my problem or asking one of my colleagues what they would do, I'm going to work through the solution process myself. I expect to re-invent the wheel a couple of times, which would typically be thought of as inefficient, but I'm hoping the short-term losses in productivity will yield greater gains in the long run. With that having been said, bring on the pain!

Dan DeMeyere
Ruby on Rails Newbie...err...Novice and Front-end Engineer
dan@thredup.com