Migration by using jdbc
JRuby on Rails
マイグレーションを行う前に、http://www.headius.com/jrubywiki/index.php/JRuby_on_Rails を見ながら動かしてみる。
- ファイアウォールがあるなら, 環境変数HTTP_PROXYを設定? ("http://${http-proxy-host}:${http-proxy-port}/" っていうフォーマット)
- $JRUBY_HOME/bin/gem install rails -y --no-ri --no-rdoc を実行(すでに上で実行してあるからパス)
- jruby $JRUBY_HOME/bin/rails
を実行してrailsのアプリを生成(すでにアプリがあるのでそれを使うのでパス) - そのアプリにcdして、jruby script/server でサーバーを起動。
これで、ブラウザから動作を確認できました。
script/console in JRuby on Rails
再度、http://jruby-extras.rubyforge.org/ActiveRecord-JDBC/ を開いて、今度はInside Railsを見ながらTry
1. ActiveRecord-JDBCのインストール。これは上でやっているのでパス。
2. 一回だけ実行する設定を config/environment.rb に追加。追加する場所は Rails::Initializer の直前。
... require File.join(File.dirname(__FILE__), 'boot') require 'rubygems' gem 'ActiveRecord-JDBC' require 'jdbc_adapter' Rails::Initializer.run do |config| ...
3. database.yml をJDBCアダプタを使うように設定。ドライバのクラス名とURLが必要っす。
migration_source: adapter: jdbc driver: org.hsqldb.jdbcDriver url: jdbc:hsqldb:hsql://localhost/ username: sa
これで動くはずなんだけど、とりあえずjrubyでscript/consoleを動かして確認します。
1. CLASSPATHにJDBCドライバのパスあるか確認。
2. jruby script/consoleを起動
3.JDBCで接続しているマイグレーション元のテーブルをマッピングするモデルを定義
>> class AppUser < ActiveRecord::Base >> establish_connection "migration_source" >> set_primary_key 'app_user_id' >> set_table_name 'app_user' >> end >> => nil
4. findしてデータが取れるかどうかを確認
AppUser.find(:all, :limit => 5)
でデータがゲットできていればOKです。
あとは上で定義したようなモデルを使ってマイグレーション先にデータをコピーするようなマイグレーションを書いてあげれば、JDBCでしか接続できないDBから他のDBへの移行が実現できます。