Railsで複数データベースを扱えるBanana

初めてgemを作って、RubyGems.orgで公開してみました。
ソースはGithubに置いてあります。

これは何?

1つのrailsアプリで複数データベースのマイグレーションを実行できるようにするgemです。
gem入れて、設定しておけば普段どおり rake db:create, rake db:migrate, rake db:drop が使えます。

インストール方法

gemなので、Gemfileに書いてbundle installするか、gem installで入ります。

Gemfile

gem 'banana'

もしくは

$ gem install banana

使い方

config/database.yml にdatabaseの設定を追加し、model/migrationに接続先の情報を書きます。
接続先の情報は /#{Rails.env}$/ になるような名前にして下さい。

config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: fruit_development

test:
  <<: *default
  database: fruit_test

production:
  <<: *default
  database: fruit_production

vegetable_development:
  <<: *default
  database: vegetable_development

vegetable_test:
  <<: *default
  database: vegetable_test

vegetable_production:
  <<: *default
  database: vegetable_production

app/models/vegetable.rb

class Vegetable < ActiveRecord::Base
  establish_connection "vegetable_#{Rails.env}"
end

app/models/onion.rb

class Onion < Vegetable
end

db/migrate/20120728121720_create_onions.rb

class CreateOnions < ActiveRecord::Migration
  DATABASE_NAME = "vegetable_#{Rails.env}"

  def change
    create_table :onions do |t|

      t.timestamps
    end
  end
end
タスクの実行

いつものようにrake db:create, rake db:migrate, rake db:dropが使えます。

$ rake db:create
  • /#{Rails.env}$/ なデータベースを作成します
  • development環境の場合、/test$/ なデータベースも作ります。
$ rake db:drop
  • /#{Rails.env}$/ なデータベースを削除します。
  • development環境の場合、/test$/ なデータベースも削除します。
$ rake db:migrate
  • migrationファイルの接続先情報にあわせてテーブルを作成・更新します。