活动记录
如果您使用ActiveRecord作为您选择的 ORM,您可以在 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是一个 gem,它使用更标准的接口重写现有的 Ruby 数据库驱动程序。DataMapper在内部使用DataObjects来管理与数据库的连接。处理连接后, DataMapper将在需要时重新连接。
before_fork do |server, worker|
DataObjects::Pooling.pools.each do |pool|
pool.dispose
end
end