- ベストアンサー
railsのmigration機能
Ruby on Railsのmigration機能は便利ですが、この機能をRuby on Rails以外のプロジェクトのユニットテストのために使いたいと思っています。 というわけでRoRプロジェクトを作成しないで同等のmigration機能だけを使用できるようなツールみたいなものを探していますが、見つかりません。 (当方のrubyとRoRの無知さから情報にたどり着けないだけの可能性あり。。) 何かいいツール知ってる方いましたら教えて下さい。 (rubyで書かれていなくてもNPです。)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Railsプロジェクトでなくとも、Railsに組み込まれているactiverecordライブラリさえあればmigrationを利用可能です。ただし、その場合はrailsのconfig/database.ymlに書かれている相当のactiverecord初期化処理を自分で呼び出さねばなりません。 参考URLに挙げたようなやり方で、ActiveRecord::Base.establish_connectionを呼び出してactiverecordを初期化します。例えば次のような具合です。 require 'rubygems' gem 'activerecord' require 'active_record' # 仮にSQLite3を使用。ファイルhoge.sqlite3に書き出し ActiveRecord::Base.establish_connection \ :adapter => 'sqlite3', :database => 'hoge.sqlite3' # migrationを定義 class CreateUsers < ActiveRecord::Migration def self.up create_table(:users) do |t| t.string :name, :limit => 100, :null => false, :unique => true t.timestamps end end def self.down drop_table(:users) end end # 実行 CreateUsers.up
お礼
まさに望んだ回答ありがとうございます。 実はユニットテストしようとしているのは、RubyどころかC#で開発しているプロジェクトなんですけど、NDbUnitはまだoracleに対応していなくて困って外部コマンドを呼んだり等してました。(この方法だとテキストベースでデータを設定できない) その点、全てRubyで行えばこんなに簡単にできちゃいますよね。(C#の場合はIronRubyがある!Javaの場合はJRubyがあるけど、DbUnitはoracle対応済。) 参考URLに書かれていることと、クラスライブラリのActiveRecord.Baseについて読んでいこうと思います。