2011-02-13 55 views
4

我只是升級我的Web服務從Rails 2.3.8到Rails 3.0.3與Rails3,章魚複製寶石查詢錯誤期間MySQL服務器丟失連接

它幾乎工作正常。

我有一個問題,當服務與capistrano一起部署時發生丟失的連接錯誤。每次部署大約發生3次。 該服務使用https://github.com/tchandy/octopus的章魚寶石進行數據庫複製,具有1個主數據庫和2個從數據庫。

的Mysql ::錯誤:查詢過程中丟失連接到MySQL服務器:章魚時不與單一的數據庫使用SELECT regions * FROM regions WH ...是不是發生

的問題。但是流量需要複製。

請給我任何建議。謝謝。

回答

5

我是八達通的創造者。

你可以把它添加到你的shards.yml文件嗎?

verify_connection: true 

而且,如果不工作,嘗試軌配置爲自動重新連接:

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

觀測數據:這將與MySQL適配器,而不是隻mysql2工作。

+0

謝謝!我很驚訝你是八達通的創造者。你是對的。這是解決方案之一。但是,這個問題不能由乘客解決。它使用Nginx + Unicorn解決。 – Jaehyun 2011-02-28 04:41:03

1

如果您使用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 
相關問題