Rescuing migrations

DHH will probably hate my example, but...

AWDR talks about the difficulties and dangers of using complex
migrations--complex being defined as "doing more than one thing". Not
being satisfied with the alternatives, I have come up with a system,
which people might want to consider for best practice. Example:

class CreateUsers < ActiveRecord::Migration
  def self.up

    create_table :users do |t|
      t.column :username, :string, :null => false
      t.column :salt, :string
      t.column :pw, :string, :null => false
      t.column :expires, :datetime, :null => false
      t.column :perm0, :int, :default => 0, :null => false
    end

    begin
      add_index(:users, :username, :unique => true)
      User.send(:reset_root, 'Hownowbrowncow')
    rescue Exception => e
      down rescue STDERR.puts "Nested exception executing
CreateUsers.down:\n#{$!}"
      raise e
    end
  end

  def self.down
    drop_table :users
  end
end