ActiveRecordを単体で使ってマイグレーションやRSpecを実行する
※最終更新日(2014/6/30)
素直にRailsに乗っかるのが簡単ですね。
config/application.rb #require 'rails/all' require 'active_record/railtie'
たったこれだけ。あとはenvironments以下の不要になった設定項目を削除します。
.
Webじゃないアプリの開発でActiveRecordは使いたいけどRailsの全ては必要ない、でもDBの設定ファイルやマイグレーションの機能はRailsから流用して開発したい、という場合に用意するものをまとめました。完璧に調べあげたわけではないので、まだ足りない部分が出てくるかもしれません。
やりたかったのは以下の通り。
- DBの設定ファイルはRailsと同じconfig/database.ymlを使いたい
- マイグレーションファイルをdb/migrate以下で管理したい
- マイグレーション関連のタスクはrake db:xxxで実行させたい
色々試行錯誤してこれでいけるんじゃないかな、というのは以下の様な感じ。application.rbの様なファイルも用意する場合、多少requireする場所など変わってくるかもしれません。バージョンは4.1.1です。
# 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ロールバックしないですし。