jeremysuriel (owner)

Revisions

gist: 176353 Download_button fork
public
Public Clone URL: git://gist.github.com/176353.git
Embed All Files: show embed
data_fabric db:migrate db:rollback rakefile mods #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
 
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
 
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
 
require 'tasks/rails'
 
 
require 'fileutils'
include FileUtils::Verbose
 
RAILS_ENV = ENV['RAILS_ENV'] || 'development'
 
 
def dbtask(taskname, &block)
    require 'erb'
    require 'logger'
    require 'active_record'
    env = RAILS_ENV
    reference = YAML::load(ERB.new(IO.read("config/database.yml")).result)
    ActiveRecord::Base.logger = Logger.new(STDOUT)
    ActiveRecord::Base.logger.level = Logger::WARN
    ActiveRecord::Base.configurations = reference.dup
    old_config = reference[env]
    
    reference.each_key do |name|
      next unless name.include? env
      next if name.include? 'slave' # Replicated databases should not be touched directly
 
      puts "#{taskname} #{name}"
      ActiveRecord::Base.clear_active_connections!
      ActiveRecord::Base.configurations[env] = reference[name]
      ActiveRecord::Base.establish_connection RAILS_ENV
      ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
      
      yield
      
    end
end
 
Rake::TaskManager.class_eval do
  def remove_task(task_name)
    @tasks.delete(task_name.to_s)
  end
end
 
 
Rake.application.remove_task 'db:migrate'
Rake.application.remove_task 'db:rollback'
 
namespace :db do
 
    task :migrate do
      dbtask("Migrate") {
        ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
      }
    end
    
    task :rollback do
      dbtask("Rollback") {
        ActiveRecord::Migrator.rollback("db/migrate/",1)
      }
    end
end