bananaとは
データベースが複数ある時のmigrationをうまい事やってくれるgemです。
このテーブルはこのDB、こっちのテーブルは別のDBに作るといった事を簡単にできます。
Githubページはこちらです。
導入
Gemfile
gem 'banana'
bundle install
使い方
下のように「DATABASE_NAME」を定義するだけです。
この状態でmigrateすれば指定したデータベースにテーブルを作ってくれます。
db/migrate/20150208121021_create_users.rb
class CreateUser < ActiveRecord::Migration
DATABASE_NAME = "db2"
def change
create_table :onions do |t|
t.timestamps
end
end
end
config/database.yml
default: &default
adapter: mysql2
encoding: utf8
reconnect: false
pool: 5
username: root
password:
socket: /var/run/mysqld.sock
db1:
<<: *default
database: db1
db2:
<<: *default
database: db2
複数DBへの接続方法
これは「banana」の機能ではなくRailsがデフォルトで持ってる機能です。
このmodelはdb2に接続したいといった場合は下のように記述します。
app/models/user.rb
class User < ActiveRecord::Base
establish_connection :db2
end
少しハマった所
table already existsになるパターンがある
bananaを利用していると「table already exists」エラーに遭遇する事があります。
発生するパターンは下の通りです。
- migrationでdb1とdb2にテーブルを作成
- db1だけ削除して再度migrate
- db2に対してテーブルを作ろうとして「table already exists」エラー
bananaはschema_migrationsのレコードをメインDBにしか作らないので、db2にテーブルがある場合にもcreate tableしようとしてエラーになります。
データベースをリセットしたい時は気をつけた方が良さそうです。
その他
Rails4にしたせいか他Gemの環境かは確認してないのですが、一部のコマンドでエラーが出ました。
確認した限りだと「rake db:create」「rake db:reset」でエラーが出てます。