Rails Application Templates

We have a very basic Rails stack called Prologue that we start with for a lot of projects. The Rails 2.3.8 version of Prologue was simply kept in a repo and whenever we needed to start a new project we would clone it and go from there. Pretty basic stuff. Recently I have been making a new version of Prologue on Rails 3 and I decided to take the approach of writing it as an application template instead.

The main advantages we've seen so far with this are:

  • Ability to mix and match templates
  • Dynamically setup basic variables on the fly
  • Dependencies stay up-to-date
  • Huge time savings in getting a project started

Writing templates for Rails 3 is extremely easy. Here's some examples you will find useful.


if yes?('Do you need sphinx? (yes/no)')

do stuff to setup sphinx



removefile 'thisfileisgonna_die.rb'


createfile 'newfile.txt' do <<-'FILE' really sweet stuff all up in my text file FILE end


append_file 'db/seeds.rb' do <<-'FILE' User.create! :name => 'Quick Left' FILE end


gsubfile 'config/application.rb', /:password/, ':password, :passwordconfirmation'

gsubfile 'config/environments/production.rb', /config.i18n.fallbacks = true/ do <<-'RUBY' config.i18n.fallbacks = true config.actionmailer.defaulturloptions = { :host => 'yourhost.com' } ### ActionMailer Config # Setup for production - deliveries, no errors raised config.actionmailer.deliverymethod = :smtp config.actionmailer.performdeliveries = true config.actionmailer.raisedeliveryerrors = false config.actionmailer.default :charset => "utf-8" RUBY end


injectintofile 'config/application.rb', :after => "# Configure the default encoding used in templates for Ruby 1.9.n" do <<-'RUBY' config.generators do |g| g.template_engine :haml end RUBY end


apply File.expandpath("../templates/sphinx.rb", _FILE__)


get "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", "public/javascripts/jquery.js" get "http://github.com/rails/jquery-ujs/raw/master/src/rails.js", "public/javascripts/rails.js" get "http://html5shiv.googlecode.com/svn/trunk/html5.js", "public/javascripts/shiv.js"


run 'bundle install' run 'any command here'


generate(:migration, "AddNameToUsers name:string")


inside "public/javascripts" do removefile 'controls.js' removefile 'dragdrop.js' removefile 'effects.js' removefile 'prototype.js' end


say "templates are pretty dope"


gem "rspec" gem "rspec-rails", ">= 2.0.0.beta.19", :group => [:test, :development] gem "cucumber", :git => "git://github.com/aslakhellesoy/cucumber.git", :group => [:test, :development]


git :init git :add => '.' git :commit => "-m 'Initial commit'"

Those examples should really get you going. Once you're ready to try out the application template simply run:

rails new my_app -m path/to/template.rb

Beyond that just keep in mind you can use any methods provided by Thor::Actions and Rails::Generators::Actions. How sweet is that!

QuickLeft closeicon

Let's Build Your Project

Phone: 844.QL.NERDS
Quick Left HQ
902 Pearl St.
Boulder, CO 80302
Quick Left San Francisco
665 3rd St.
San Francisco, CA 94107
Quick Left Portland
529 SW 3rd Ave.
2nd Floor
Portland, OR 97204
Quick Left Denver
1062 Delaware St.
Denver, CO 80204