-
-
Save drogus/6087979 to your computer and use it in GitHub Desktop.
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' |
Thank you!! This was so buried. Only when I googled 'rake file using DatabaseTasks' did this come up as the fourth hit. Here are some suggested key words. I'll add them here so others can find this.
- active record rake file without rails
- active record rake tasks without rails
- how to load databases.rake
The other hits were about referencing the same active record configuration for using DatabaseTasks. Seriously, I wanted the authentic rake tasks instead of implementing them myself. So again thank you.
Simpler solution to uninitialized constant ActiveRecord::Tasks::SQLiteDatabaseTasks::Rails
:
DatabaseTasks.root = File.dirname(__FILE__)
I just tried this gist with activerecord (4.2.0)
and got the following error: NoMethodError: undefined method
application' 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.
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
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.
I would like to point to Jason modification of this gist, which works for ActiveRecord 4.2.0
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
I have made minimal example/setup using Rails migration and active record outside Rails
https://github.com/euclid1990/rails-migration
(Support Rails >= 5.2)
🔢
I get
ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
Thanks for the gist! Was a huge help -- there's no way I would have been able to figure out how to include those tasks without it.
Just a tiny note to anyone using this, remember to change the environment variable mentioned above to match the environment variable you use to set your env.
I wasn't thinking and just copied that outright and wasted some time debugging a stupid issue as a result.
Had a goliath, test unit, active support test cases setup and was trying to get parallel_tests to work with it. It always passes RAILS_ENV though so some of the commands were acting up as a result because I had this set to development.