0

我们在单独的模型中使用两个数据库,一个主数据库,一个辅助数据库,如下所示:

class SecondModel < ActiveRecord::Base
  establish_connection(ENV['SECOND_DATABASE'])
end

我将在 Heroku 应用程序上切换到 Unicorn,我们必须在这里断开数据库:

before_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
  end
end

我不确定是否要关闭第二个数据库的连接。有人对此有任何想法吗?

4

1 回答 1

2

好的,我想我现在可以正常工作了,这是代码:

before_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    # disconnect primary database
    ActiveRecord::Base.connection.disconnect!
    Rails.logger.info('Disconnected from ActiveRecord')

    # disconnect the second database
    SecondModel.connection.disconnect! if SecondModel.connection.active?
    Rails.logger.info('Disconnected from SecondModel')
  end
end

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    # connect primary database
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')

    # connect second database
    SecondModel.establish_connection(ENV["SECOND_DATABASE"])
    Rails.logger.info('Connected to SecondModel')

    # verify connections
    ActiveRecord::Base.verify_active_connections!
  end
end

我遇到了一些错误,因为我在重新连接到 SecondModel 的数据库之前正在验证连接。

欢迎任何想法!

于 2013-01-26T11:11:38.027 回答