Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 6189
  • Last Modified:

How to undo an incorrect rails migration after rake db:migrate

I forgot to put any code in the 'down' section. How do I undo a 'rake db:migrate'?


class User < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column "username", :string
      t.column "fname", :string
      t.column "lname", :string
      t.column "email", :string
      t.column "hashed_password", :string
      t.column "campus_id", :integer
    end
  end
 
  def self.down
  end
end

Open in new window

0
smetterd
Asked:
smetterd
1 Solution
 
WodCommented:
http://blog.apesseekingknowledge.net/articles/category/ruby-on-rails

"I kept having typos in my migrations, and it turned out to be easier to just zap all the tables and re-run rake migrate than to undo just enough of the migration to get the db back to the way the migration was expecting.

Anyway, so I wrote this wipedb script that reads database.yml so you don’t need to maintain the database user & password in multiple places."


#! /usr/bin/env ruby
#
# $Id: wipedb 1171 2006-06-10 16:36:57Z jpb $
#
# Copyright 2006 J. P. Block <jpb@ApesSeekingKnowledge.net>
 
require 'ostruct'
require 'optparse'
require 'yaml'
 
class MyArgs
  MODENAMES = %w[development test production]
 
  # return structure showing what opts were picked
 
  def self.parse(args)
    options = OpenStruct.new
    options.mode = 'development'
    options.debug = 0
 
    opts = OptionParser.new do |opts|
      opts.banner = "Usage: script/wipedb [options]" 
      opts.separator "" 
      opts.separator "Specific options:" 
      mode_list = MODENAMES.join(',')
      opts.on("-m MODENAME", "--mode MODENAME", MODENAMES, "Select mode",
                      "  (#{mode_list})") do |the_mode|
        options.mode = the_mode
      end
      opts.on("-d", "--debug", "Turn on debug") do
        options.debug = 1
      end
      opts.on_tail("-h", "--help", "Show this message") do
        puts opts
        exit
      end
 
      opts.on_tail("--version", "Show version") do
        puts "$Id: wipedb 1171 2006-06-10 16:36:57Z jpb $" 
        exit
      end
    end
 
    opts.parse!(args)
    options
  end # parse()
end
 
options = MyArgs.parse(ARGV)
 
mode = options.mode
 
config = YAML.load_file('config/database.yml')
 
database = config[options.mode]['database']
host = config[options.mode]['host']
password = config[options.mode]['password']
username = config[options.mode]['username']
 
if options.debug == 1:  
  puts "mode: #{mode}" 
  puts "database: #{database}" 
  puts "host: #{host}" 
  puts "username: #{username}" 
  puts "password: #{password}" 
end
 
zap_list = `mysqldump -u #{username} -p#{password} --complete-insert --add-drop-table --quick --single-transaction #{database} | grep DROP`
 
zapper = IO.popen("mysql -u #{username} -p#{password} #{database}", "w+")
zap_list.each do |z|
  zapper.puts(z)
end
zapper.close_write

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now