I start any project with a revision control system. On projects of any complexity, I know you absolutely need the ability to make notes about what you’ve changed every time you make an improvement. And you need the ability to roll back to an earlier version when your improvements weren’t improvements. You also get the bonus of off-site backup of your code (assuming you use one of the many no-cost or low-cost repository hosting services).

A few years ago, the only alternative to proprietary revision control systems was the open source CVS. On occasions, it could make grown-ups cry. Subversion (SVN) has become more popular recently and it’s widely used on both open source and closed projects.

If I’m doing a project just for myself or my minions (that is, with a single point of ultimate authority), svn is the best choice. There’s nothing extra needed when you want to use svn on Mac OS X version 10.5 (Leopard); it is included when you install the Developer Tools package. You’ll just need to sign up for a repository hosting service.

For an open source project, there are good reasons to prefer Git, as detailed here by Dr Nic Williams. Git is the distributed revision control system created by Linus Torvalds (the creator of Linux). The most popular choice for a Git repository hosting service is GitHub.

For a well-funded start-up, there’s no web application hosting better than Engine Yard. I’ve used them and the level of support is better than I’ve experienced from any other hosting provider. With Engine Yard you get a team of sysadmins and application programming gurus who are leaders in the Rails community. You’ll pay for it (close to a thousand dollars per month for a staging server and redundant production servers) but it’s a better bargain than any other alternative if you’re rolling out a web app for the world to use.

If you’re not well-funded or ready to go live to the world with your web application, there are a dozen or more web hosting providers that specialize in hosting Rails web apps and will charge you less than $30/month for a virtual server. I’ve used MediaTemple and DreamHost. You get what you pay for and that often includes configuration headaches when you’d rather be coding.

You might prefer a newer approach, from Morph Exchange. They reduce the configuration overhead for deploying a Rails app.

There’s another alternative: Heroku. See the discussion here. James, Adam, and Orion have this crazy idea that you should be able to develop a Rails app and host it with zero configuration. And then use your web browser to edit the code! You sign up for an account and that’s it. Not only can you upload an existing web app and see it run immediately, but you can create a Rails app, or upload and edit an existing app, right in the Firefox web browser. This is an amazing alternative to the conventional model of developing an app locally and deploying it to a remote hosting platform.

The Heroku approach makes a lot of sense when you’re building an app to learn Rails. Or when you are in the early stages of development and need a way to show your collaborators (or potential customers) what you’re working on. Or if you are running any sort of web app that has no revenue stream to support it.

Most of the “Intro to Rails” books show how to develop web apps by writing code and then tests. (The more sophisticated books advise to write the tests and then write the code.) The books give good examples of using the built-in Test::Unit facility. But many experienced Rails developers are now using RSpec. There’s only one book I’ve seen that covers RSpec and that’s Obie Fernandez’s The Rails Way. The book doesn’t really explain why so many developers are moving to RSpec; for that, see an article by Dan North or an article by Dave Astels. They argue that we should be writing specifications, not tests.

There are a few tutorials that introduce RSpec, notably a series on the O’Reilly Network on Behavior Driven Development Using Ruby, with Part 1,Part 2, and Part 3. There are also four Peepcode screencasts, starting with RSpec Basics.

RSpec is in the midst of rapid development and there are enough differences between RSpec version 1.1.0, which introduced new functionality (“user stories’), and earlier versions which are covered in the tutorials, that it is possible to get confused.

I’m using TextMate on Mac OS X version 10.5 to develop Rails apps. Rails 2.0 has a new naming convention for views (the “.rhtml” file extension becomes “.html.erb”). TextMate’s syntax coloring doesn’t recognize the new file extension. What to do? A few people have suggested tweaks using TextMate’s Bundle Editor (here and here). A better option is the new TextMate Rails 2.0 bundle now under development by Dr Nic Williams. Right now, it’s only available for download using git but maybe by the time you read this it will have moved to the official Textmate svn repository. Check the Ruby on Rails: TextMate Google Group for more information.

Do you check the “sell-by” date on a carton of milk before you buy it? Unfortunately, there is no date on a Rails app to indicate if it has been written with recent best practices in mind. So check for a sour smell. Here are some indicators I look for.

First, is it RESTful? More than anything else, a RESTful architecture makes an app easier to understand, customize, and maintain. To determine if the developer used a RESTful architecture, look at the code for the controllers. If there are any methods other than index, show, new, create, edit, update, and destroy the developer has strayed from RESTful purity.

Second, has the app been written or updated for use with Rails 2.0? If you’re beginning a project, you’ll want to start with Rails 2.0. Some things are done a little differently in Rails 2.0. If you’re using an example app as a guide, make sure it’s a good example of how to do things with Rails 2.0.

Look for the folder config/initializers. Before Rails 2.0, the config/environment.rb file was cluttered with bits of initialization code. With Rails 2.0, we are encouraged to move initialization code to separate files in the config/initializers folder.

Take a look at the files in the Views folder. With Rails 2.0, the recommended practice is to use the file extension .html.rb. You don’t have to do that, but it is now recommended.

Finally, here is a script that will check a rails app to determine if it is compatible with Rails 2.0:

UPDATE FOR RAILS 3.0: After seeing what was available, I began developing my own Rails example apps. They’ve become quite popular, judging from the number of Rails developers visiting the GitHub repo. Each is accompanied by a detailed tutorial and an application template that can be used to generate a starter app. You can find them here.

THE ORIGINAL POST (from February 18, 2008):

I’m a firm believer that, as software developers, we always are standing on the toes of those who have gone before us.

So, in that spirit, I’m looking around for Rails example apps that I can use as a starting point for my own.

Many Rails books introduce Rails development through the process of building an example application. The best-documented Rails example apps are the ones in the books. I’ve looked through the books I have at hand. Most of the apps in the books are overly simple (for example, no authentication) or dated (no RESTful architecture).

I looked closely at RailsSpace. The authors Michael Hartl and Aurelius Prochazka fully document the steps to building a typical social networking web site. It is a full-featured app that is more complete than most tutorial applications. Unfortunately, the book was written before RESTful architectures became de rigueur. Only one part of the app is RESTful. Otherwise it might be suitable. UPDATE: Michael Hartl, one of the authors of RailsSpace, is leading development of an open source social network app, named Insoshi, which improves on RailsSpace.

I’ve used the Caboose Sample rails application on other projects, so that’s a potential starting point. The downside? It’s complex and not well documented. (The authors warn, “much of the code is targeted at an intermediate/advanced level”.)

A promising beginning point appears to be the Altered Beast forums application, a newer version of Beast. It’s RESTful. It uses Rails 2.0, rspec, and restful_authentication (with the acts_as_state_machine option). I also liked LovdbyLess, a free open source social network platform. It uses Rails 2.0 but not rspec or restful_authentication.