starting ruby on rails with multiple applications


I'm using Fedora Core 5 Linux with the latest version of Ruby on
Rails. I'm just learning it, but let's say I've created two rails
applications in the directories


I can "cd" to application1 and run "ruby script/server" to start that
application. But then must I do this for "application2" as well? Is
there a generic way of starting all ruby-on-rails applications at

Thanks, - Dave

I had a need of something like that once, so I came up with this scheme:

In each rails folder, I create three files:

app_start and app_stop contain the shell script calls necessary to
start the particular application. So if you are using Mongrel,
app_start might look something like

mongrel_rails start -p 3010 -e production -d

and app_stop would look like

mongrel_rails stop

That way each app_start/stop pair is specific to the application, but
general enough to be called via a universal script. Then I created
the universal script that would descend into the directory where all
the rails apps were (/var/www in this case), and if there was an
app_start, exec it. I named the script rails_ctrl and it looks like

#! /usr/bin/ruby

# This script is used to launch all rails apps after a restart. It
assumes that each
# app will have a file named app_start in the project's root
directory. This file needs
# to call mongrel_rails or mongrel_cluster with the proper parameters.

action =
action ||= '<none>'
action = action.downcase

app =

if !['start', 'stop', 'restart'].include?(action)
  puts "rails_ctrl: Invalid action: #{action}"

root_dir = '/var/www/'
dirs = Dir.entries(root_dir)
dirs.each do |dir|
  if !['.', '..'].include?(dir) && dir == (app || dir)
    d = "#{root_dir}#{dir}"
      f = "#{d}/app_#{action}"
      if File.file?(f)
        puts "Performing #{action} action on #{dir}..."

This was just hacked together one day to suit my purposes, so it may
have some holes in it. Feel free to take it and modify to fit your