Reflections on My First (Real) Ruby on Rails App

I have completed my first real Ruby on Rails app and it's in production.  The app answers a problem I have at work: individuals ask me to format newsletter templates all the time and it breaks up my day too often.  It's called Newsletter Maker.

The app allows me to input any number of templates with their own template tags for content areas.  They are categorized, and when a user selects a template they are able to create newsletters using the templates by filling in the areas defined by template tags.  Existing newsletters can be used as a starting point for new ones.

This sort of app is an invaluable internal tool at my workplace, which is a nonprofit organization.  We use the program MaxBulk Mailer to send newsletters to email addresses in our internal database.  The template creation and sending processes are separate, so creating templates was a good candidate for a custom web application.  Most subscription email services offer the email sending part alongside template creation, which is exactly what we don't need.

Learning Rails took some time.  I used the Agile Web Development with Rails book.  I had a copy of this covering a slightly older version of Rails, but Rails 3.1 is completely different than prior versions.  That was annoying.

Googling returned mixed success.  60% of the answers are on the old version of Rails which no longer work.  Stackoverflow was by far the most useful resource (and seemingly the only one).  The Agile Web Development book was my best resource, giving me detailed tutorials and examples of deployment, the MVC paradigm used in Rails and magic commands.

Testing was painful.  The concept of testing in Rails is very extensive.  I know it's necessary, so I struggled through.  After several days I felt better writing meaningful tests.  In the beginning I felt like I needed to test trivial things, but I know now that I should be testing important parts of my code instead of focusing too much on the small things.  I had problems reconizing how to load up the areas of my code that I needed to use with the appropriate data, but in time it clicked.

RVM and deployment was a PITA.  Capistrano is alright.  Passenger is ok.  All I have to say.  It worked out and I didn't want to hurt myself too many times.

Overall I feel like I've learned a valuable tool.  Rails does lots of things easily, and once you know Ruby's syntax things get a lot easier.