アクティブレコード
選択した ORM としてActiveRecordを使用する場合、次のようなものを Unicorn before_forkフックに追加できます。これにより、データベースへの既存の接続がすべて閉じられます。
before_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
また、これをafter_forkフックに追加します。これにより、ユニコーンがフォークするたびに新しい接続が確立されます。
after_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
データマッパー
DataMapperを使用する場合は、 before_forkフックに次のようなものを追加できます。今回は、DataObjectsを使用して接続を破棄します。DataObjectsは、既存の Ruby データベース ドライバーをより標準的なインターフェイスに書き換える gem です。DataObjectsは、データベースへの接続を管理するためにDataMapperによって内部的に使用されます。接続を破棄した後、 DataMapperは必要に応じて再接続します。
before_fork do |server, worker|
DataObjects::Pooling.pools.each do |pool|
pool.dispose
end
end