- 2008-10-04 (Sat) 23:06
- article
プラグインとか無しで、複数のDB(MySQLとPostgreSQL)を扱う方法。Rails2.1でしか試してないけど、多分1.2とかでも大丈夫。多分。MySQLとPostgreSQLの接続ライブラリはgemからインストールしておくこと。
まずは、database.ymlに扱うデータベースの定義を書く。
development:
adapter: mysql
encoding: utf8
database: db_development
username: root
password:
test:
(面倒だから略)
production:
(面倒だから略)
psql_development:
adapter: postgres
encoding: utf8
database: ma2_mcd
username: root
password:
psql_test:
(面倒だから略)
psql_production:
(面倒だから略)
次にPostgreSQLに接続させたいモデルを編集する。例えば、ProfileモデルはPostgreSQLの方に接続させたい場合は以下のようになる。
class Profile < ActiveRecord::Base
establish_connection("psql_#{RAILS_ENV}".to_sym)
end
establish_connectionにシンボルでdatabase.ymlの定義を渡せば、そのモデルはその定義のデータベースに接続する。本番、テスト、開発でそれぞれ定義が違うだろうから、RAILS_ENVで今起動している環境の定義を呼び出すようにしてやる。
追記
上記の設定で一応アプリは動作するけど、いくつか問題点があるのでそれをメモしておく。
マイグレーションの使い分けはどうする
例えば、db/migrateにcreate_hoge_for_psql.rb(数値は略)とcreate_foo_for_mysql.rbと合った場合、それをどう実行するかが問題になってくる。
普通にrake db:migrateやrake db:migrate RAILS_ENV=psql_developmentとやったら、hogeとfooが両方とも作られてしまう。こちらとして望んでるのは、hogeがPostgreSQLのみ、fooがMySQLのみにできて欲しい。
うーむ、弱った。
- Newer: VimM#3開催のお知らせ
- Older: 数字を使わずに素数判定
Comments:1
- hiroshi 09-07-31 (Fri) 21:25
-
半年以上昔の記事へのコメントなので解決済みかもしれません + 小汚いので恐縮ですが、
migration file の中で
if ActiveRecord::Base.connection.adapter_name == “PostgreSQL”
…
end
ということじゃないですよね。
Trackbacks:0
- Trackback URL for this entry
- http://ukstudio.jp/2008/10/04/rails_many_db/trackback/
- Listed below are links to weblogs that reference
- RailsでMySQLとPostgreSQLを同時に扱う方法(+問題点) from UKSTUDIO



