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 tutorials.

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 cd TEMP_DIR mkdir branches mkdir tags cd .. svn import PROJECT_URL cd .. svn checkout PROJECT_URL PROJECT_NAME cd PROJECT_NAME rails PROJECT_NAME 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.

#!/usr/bin/ruby

# 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)     else       process(reldir, controls)     end   end   if excludes.has_key?(nil)     process(base, excludes[nil])   end   addset (Dir.glob("#{base}/*") - excludes.keys.select{|file| file}.collect{|file| "#{base}/#{file}"}) end

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

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

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

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

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

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

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

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

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

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

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 dispatch.fcgi'] })