ActiveRecordを単体で使ってマイグレーションやRSpecを実行する

※最終更新日(2014/6/30)

素直にRailsに乗っかるのが簡単ですね。

config/application.rb
#require 'rails/all'
require 'active_record/railtie'

たったこれだけ。あとはenvironments以下の不要になった設定項目を削除します。

.

Webじゃないアプリの開発でActiveRecordは使いたいけどRailsの全ては必要ない、でもDBの設定ファイルやマイグレーションの機能はRailsから流用して開発したい、という場合に用意するものをまとめました。完璧に調べあげたわけではないので、まだ足りない部分が出てくるかもしれません。

やりたかったのは以下の通り。

色々試行錯誤してこれでいけるんじゃないかな、というのは以下の様な感じ。application.rbの様なファイルも用意する場合、多少requireする場所など変わってくるかもしれません。バージョンは4.1.1です。

Rakefile

# rake db:〜のコマンドを読み込む
load "active_record/railties/databases.rake"

# 設定しないとrake db:createが落ちる
ActiveRecord::Tasks::DatabaseTasks.env = ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || 'development')
ActiveRecord::Tasks::DatabaseTasks.database_configuration = YAML.load_file('config/database.yml')

ActiveRecord::Tasks::DatabaseTasks.db_dir = 'db' # 設定しないとrake db:migrateが落ちる
#ActiveRecord::Tasks::DatabaseTasks.fixtures_path = #まだ試してない
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = 'db/migrate'
#ActiveRecord::Tasks::DatabaseTasks.seed_loader = #まだ試してない
#ActiveRecord::Tasks::DatabaseTasks.root = Pathname.new(Dir.pwd) # 設定しないとsqlite3のrake db:dropが落ちる

# lib/rails/application.rbで定義されているタスクをエミュレート
task :environment do
  require File.expand_path '../config/environment', __FILE__
end

environment.rb

# database.ymlを読み込んでDBに接続する
ActiveRecord::Base.configurations = YAML.load_file('config/database.yml')
ActiveRecord::Base.establish_connection (ENV["RAILS_ENV"] || :development).to_sym

spec_helper.rb

ENV["RAILS_ENV"] ||= 'test'

require 'active_record'
#require 'rspec/rails/adapters'
#require 'rspec/rails/fixture_support'

require File.expand_path '../../config/environment', __FILE__

※細かい設定は省略

改めて見返してみるとRailsまるごと持ってきて必要なところだけ使えばいいかなって気がします。テストでDBロールバックしないですし。