gmoniey
gmoniey

Reputation: 7995

Rails -- Possible to run migration methods in generic rake task?

I know this is not best practice, and most likely shouldn't even be used, as thats what migrations are used for, but I was wondering if its possible to execute migration specific commands in a regular rake task. Something like:

namespace :dummy do
    task :update => :environment do
      add_column :users, :deleted, :boolean, { :null => false, :default => false }
   end
end

Thanks

Upvotes: 5

Views: 882

Answers (2)

jpemberthy
jpemberthy

Reputation: 7533

Yes, you should do something like this:

namespace :dummy do
  task :update => :enviroment do
    ActiveRecord::Migration.send(:add_column, :users, :deleted, :boolean, { :null => false, :default => false })
  end
end

Not tested, but the important thing here is to include the migration class and then send the method you wish to run.

UPDATED to use ActiveRecord::Migration directly via @tadman

Upvotes: 2

tadman
tadman

Reputation: 211740

It is possible to run arbitrary pseudo-migrations in your rake tasks:

namespace :dummy do
  task :update => :environment do
    ActiveRecord::Base.connection.add_column :users, :deleted, :boolean, :null => false, :default => false
  end
end

If you're doing a lot of that sort of thing, use short-hand:

namespace :dummy do
  task :update => :environment do
    c = ActiveRecord::Base.connection

    c.add_column :users, :deleted, :boolean, :null => false, :default => false
  end
end

Upvotes: 7

Related Questions