Where do I start?

Ok, in line with my last post - I have the original Agile book, and
I've been googling tutorials and whatnot. From what I can see, the
ONLamp.com tutorial seems popular (Rolling with Ruby) - but it is 2
years old as well. I have the Rails in 4 days PDF downloaded - that
seems possibly more current.

What is the best way to get started? I remember very little so i will
be starting from scratch again. I read why's poignant guide back then,
I'm not sure if I need to rehash that.

I also downloaded Bitnami Rubystack, which seems to be a nice all in
one install. Some of the other stuff seems out of development - is
that a good way to get the environment up and running?

Instant Rails is no longer being developed - I hate to jump in to
something that is going away. That is why I grabbed RubyStack. I'm on
a PC - I too need a mac, but alas, it's the PC for now.

heh. I found myself in a similar situation -- bought the original book
last year for a project that got put aside, and, getting back to it this
year, decided the changes since then were substantial.

I'd recommend getting the second edition.

FWIW, and best of luck!

Sounds good... what about this ONLamp tutorial...


Since it's two years old... is it still a good one?

Frankly, I found the new book to be pretty weak as a training manual.
I went all the way through, and then went hunting for tutorials. It
probably would have been easier if I wasn't starting with a poorly
designed distributed MS SQL Server database. The ones you mentioned
were all I found. I don't recall any really major problems with the

I know that InstaRails is no longer supported. I would advise getting
it anyway. Three gochas:
1) Run gem update immediately. If you have firewall troubles, you
want to find out right away anyway. (I'm downloading all gems & doing
local installs)
2) Instarails insists that it knows where your projects are. This is
very inconvenient for the way I use subversion, so I just pop a
console & cd.
3) Rails itself is really, really stupid about subversion. Do NOT do
a rails -c if you value your sanity.

I like to have a repo image on my local drive. YMMV:

mkdir TEMP_DIR
mkdir branches
mkdir tags
cd ..
svn import PROJECT_URL
cd ..
mov PROJECT_NAME trunk
add_svn trunk
svn commit -m "Initial rails commit"

Here is my (ugly) add_svn script. The most contentious decision is
probably about whether or not you ignore database.yml. This is
discussed in the book.


# add_svn by Nathan Zook
# usage: add_svn [directory]
# Adds rails files with reasonable ignore properties

def add_excepting(base, excludes)
  excludes.each do |dir, controls|
    next unless dir
    reldir = "#{base}/#{dir}"
    svn("add --non-recursive #{reldir}")
    if controls.is_a? Hash
      add_excepting(reldir, controls)
      process(reldir, controls)
  if excludes.has_key?(nil)
    process(base, excludes[nil])
  addset (Dir.glob("#{base}/*") - excludes.keys.select{|file|
file}.collect{|file| "#{base}/#{file}"})

def process(reldir, controls)
  ignore = []
  controls.each do |pat|
    if exec?(pat)
      callout(reldir, exec?(pat))
    elsif backup?(pat)
      ignore << backup(reldir, backup?(pat))
      ignore << pat
  svn("propset svn:ignore \"#{ignore.join("\n")}\" #{reldir}") unless
  files = Dir.glob("#{reldir}/*") + Dir.glob("#{reldir}/.*") -
%w(.svn . ..).collect{|file| "#{reldir}/#{file}"}
  addset ignore.inject(files) { |files, pattern|
    files - Dir.glob("#{reldir}/#{pattern}")

def addset(files)
  svn("add #{files.join(' ')}") unless files.empty?

def exec?(directive)
  match_and_strip( /\A /, directive)

def backup?(directive)
  match_and_strip(/\A:backup /, directive)

def match_and_strip(rexp, directive)
  if rexp.match(directive)
    directive.sub(rexp, '')

def backup(dir, file)
  File.rename("#{dir}/#{file}", "#{dir}/#{file}.example")

def svn(args)
  callout(".", "svn #{args}")

def callout(dir, cmd)
  cwd = Dir.getwd
  Dir.chdir dir
  system(cmd) or raise "'#{cmd}' in directory #{dir} went bang: #{$?}"
  Dir.chdir cwd

root = ARGV.shift || '.'
Dir.chdir root
cwd = Dir.getwd
Dir.chdir '..'
base = File.basename(cwd)

if ! File.directory? "#{base}/.svn"
  svn("add #{base} -N")

add_excepting( base, {
  'log' => ['*.log'],
  'db' => ['schema.rb', 'development_structure.sql', '*.rb'],
  'doc' => ['*.doc'],
  'tmp' => {
      nil => ['*'],
      'sessions' => ['*'],
      'sockets' => ['*'],
      'cache' => ['*'],
      'pids' => ['*'],
  'config' => [':backup database.yml'],
  'public' => [':backup dispatch.rb', ':backup dispatch.cgi', ':backup