Потерянное соединение с сервером MySQL во время ошибки запроса с Rails3, гем репликации осьминога - PullRequest
4 голосов
/ 13 февраля 2011

Я просто обновляю свой веб-сервис с Rails 2.3.8 до Rails 3.0.3

Это почти нормально работает.

У меня есть одна проблема, возникает потеря соединения, когда службаразвернут с капистрано.Примерно 3 раза происходило каждое развертывание.Служба использует осьминог gem из https://github.com/tchandy/octopus для репликации базы данных с 1 главной и 2 подчиненными базами данных.

Mysql :: Ошибка: потеря соединения с сервером MySQL во время запроса: SELECT regions. * FROMregions WH ...

Проблема не возникает, если осьминог не используется с одной базой данных.Но репликация необходима для трафика.

Пожалуйста, дайте мне любой совет.Спасибо.

Ответы [ 2 ]

5 голосов
/ 27 февраля 2011

Я создатель Осьминога.

Можете ли вы добавить это в свой файл shards.yml?

verify_connection: true

Также, если это не сработает, попробуйте настроить рельсы на автоматическое переподключение:

http://guides.rubyonrails.org/2_3_release_notes.html#reconnecting-mysql-connections

Obs: это будет работать только с адаптером mysql, а не mysql2.

1 голос
/ 31 января 2012

Если вы используете Phusion Passenger и PassengerSpawnMethod smart .

# config/initializers/phusion_passenger.rb
if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
    if forked
      # the following is *required* for Rails + "PassengerSpawnMethod smart".
      if defined?(ActiveRecord::Base)
        # force reconnect to "master" connection.
        ActiveRecord::Base.connection_pool.disconnect!

        # force reconnect to our octopus "slave" pools. This may include the "master" pool above.
        if defined?(Octopus)
          ActiveRecord::Base.connection_proxy.instance_variable_get(:@shards).each { |name, pool| pool.disconnect! }
        end
      end
    end
  end
end

Это с:

# database.yml and shards.yml
reconnect: true
...