マスタ系レコードを共有しながら,業務系アプリケーションを複数作っていくなら必須の情報なんだが,あんまり話題になってるのを見たことがない.
MySQL が自分の環境的にどうにも鬼門でうまく動かせた試しがなく,そこを何とかしてる時間もないので,SQlite で無理矢理にでも動かす.
- 共通 DB の置き場を決め,各アプリケーションの database.yml から参照する.
例えば "app1", "app2" とアプリケーションと同じレベルに "shared_db" みたいなディレクトリを作ってそこに sqlite3 ファイルを設置する.
database.yml
shared_db:
adapter: sqlite3
database: ../shared_db/shared_db.sqlite3
pool: 5
timeout: 5000
```2. 各モデルから 共通 DB に接続する.
``` company.rb
class Company < ActiveRecord::Base
establish_connection(:shared_db)
…
end
親アプリの models 以下をロードパスに含める方法もあるようだが,結局,リレーションを宣言したりしないといけないので,DRY 原則には反するものの,子アプリでローカルファイルを持っていた方が分かりやすい.その際,必要最低限の表示用メソッドなどもコピーしておく必要がある.
- 検討事項
- 共通 DB のレコード更新用に別のアプリを起動させておき,子アプリからはそこへのリンクを貼るようにする.(美しくない)