0

次のように、別のモデルで 1 つのメインと 1 つのセカンダリの 2​​ つのデータベースを使用しています。

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

2 番目のデータベースの接続を閉じる方法がわかりません。誰もこれについて何か考えがありますか?

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 に答える