Skip to content

Instantly share code, notes, and snippets.

@drogus
Created July 26, 2013 10:49
Show Gist options
  • Star 62 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save drogus/6087979 to your computer and use it in GitHub Desktop.
Save drogus/6087979 to your computer and use it in GitHub Desktop.
This is the example contents of the Rakefile, which you would use to run active record tasks without using Rails. It assumes using the same directories as rails uses: `db/migrate`, `config/database.yml`.
require 'bundler/setup'
require 'active_record'
include ActiveRecord::Tasks
db_dir = File.expand_path('../db', __FILE__)
config_dir = File.expand_path('../config', __FILE__)
DatabaseTasks.env = ENV['ENV'] || 'development'
DatabaseTasks.db_dir = db_dir
DatabaseTasks.database_configuration = YAML.load(File.read(File.join(config_dir, 'database.yml')))
DatabaseTasks.migrations_paths = File.join(db_dir, 'migrate')
task :environment do
ActiveRecord::Base.configurations = DatabaseTasks.database_configuration
ActiveRecord::Base.establish_connection DatabaseTasks.env
end
load 'active_record/railties/databases.rake'
@danelowe
Copy link

Simpler solution to uninitialized constant ActiveRecord::Tasks::SQLiteDatabaseTasks::Rails:

DatabaseTasks.root = File.dirname(__FILE__)

@ajorgensen
Copy link

I just tried this gist with activerecord (4.2.0) and got the following error: NoMethodError: undefined methodapplication' for Rails:Module`

The fix was something like this:

module Rails
  def self.root
    File.dirname(__FILE__)
  end

  def self.env
    ENV['APP_ENV']
  end

  def self.application
    Paths.new
  end
end

class Paths
  def paths
    { "db/migrate" => [File.expand_path("../db/migrate", __FILE__)] }
  end

  def load_seed
    load File.expand_path("../db/seeds.rb", __FILE__)
  end
end

EDIT: This also includes a fix for the rake db:seed task.

@qd3v
Copy link

qd3v commented May 27, 2015

If someone need only part of AR tasks (for example while testing gem you don't need half of them, because you test against test db and do not need seed or bunch of others) and for more details on how @drogus gist works, check my variation (based on this, thanks, btw :) https://gist.github.com/vanburg/56c5691c799c9e62e81a

@jehughes
Copy link

Super helpful gist!

I'm using Ruby 2.3.1 and found I needed to change the env variable to a symbol when making the connection:

ActiveRecord::Base.establish_connection DatabaseTasks.env.to_sym

Otherwise I was getting a missing adapter error.

@foton
Copy link

foton commented Mar 21, 2017

I would like to point to Jason modification of this gist, which works for ActiveRecord 4.2.0

@Paxa
Copy link

Paxa commented Jul 3, 2017

Solved as:

# Rakefile
if Rake.application.top_level_tasks != ['test']
  require_relative 'config/application'
  Rails.application.load_tasks
  Rake::Task['test'].clear
end

task :test do
  ENV['RAILS_ENV'] = 'test'
  Dir.glob('./test/**/*_test.rb').each { |file| require file}
end

@euclid1990
Copy link

I have made minimal example/setup using Rails migration and active record outside Rails
https://github.com/euclid1990/rails-migration
(Support Rails >= 5.2)
🔢

@andreyuhai
Copy link

I get
ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment