You can get Rake-based ActiveRecord Migrations in your non-Rails project with only the smallest amount of massaging.

If you’re like me, you’ve been missing the nice ability to simply do rails db:migrate since this is a feature that’s mostly missing if you’re outside of Rails. The good news is that it hasn’t gone too far away, but does still require a little effort to get working.

You’ll have to create your own Rakefile to stock with your tasks. Fortunately, most of the work behind the Rails db tasks are all behind single method calls. So, to add migrations and schema dumps, you can do the following:

namespace :db do
  require "active_record"
  require_relative "config/database"

  require "active_record/tasks/database_tasks"
  ActiveRecord::Tasks::DatabaseTasks.db_dir = "db/"

  desc "Migrate the database"
  task :migrate do
    ActiveRecord::Tasks::DatabaseTasks.migrate

    puts "Done"
  end

  desc 'Create a db/schema.rb'
  task :schema do
    db_config = ActiveRecord::Base.connection_db_config

    ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)

    puts "Done"
  end
end

This is much better than my previous efforts because it’s no longer monkeying with fairly internal tools to ActiveRecord. This is a slightly more open API for running these tasks, which’ll keep working so long as Rails continues using them.

Even though I linked to the DatabaseTasks file myself, I didn’t actually read it properly. In the end it was none other than the ex-CTO of the worlds best altmetrics provider and current provider of excellent technical services, Paul Mucur that lead me to the water on this one.