2011-09-13 53 views
4

升級我的Rails應用程序的若干部分後(紅寶石1.9.2,Rails的3.0.4,1.1.0的DataMapper),並移動到乘客的獨立,我們開始越來越怪異MySQL連接錯誤,包括:乘客分叉工作進程後,如何重置Datamapper連接?

  • 現場算錯配
  • 查詢時MySQL服務器失去連接
  • MySQL服務器已消失

然後我想起乘客叉的過程,你需要重新打開之類的Redis,內存緩存等新的連接。 或者數據流將會出現亂碼,並且我發現另一個post由於與MySQL相同的問題而引發了類似的冒險。

但我還記得閱讀here Passenger自動處理數據庫連接。

所以我有兩個問題:

1)我如何告訴DataMapper的創建和使用新的數據庫連接?和/或:

2)分叉乘客自動處理分叉數據庫連接嗎?爲了叉子的緣故...;)

回答

1

要回答#2,不,Passenger本身在分叉後不處理關閉文件句柄。你必須自己管理它,除非你的寶石適合你。

要回答#1,我拼湊了一些我發現的東西。添加到environment.rb並讓我知道它是否工作!

if defined?(PhusionPassenger) 
    PhusionPassenger.on_event(:starting_worker_process) do |forked| 
     if forked 
      # We're in smart spawning mode. 
      DataObjects::Pooling.pools.each do |pool| 
       pool.dispose 
      end 
     else 
      # We're in direct spawning mode. We don't need to do anything. 
     end 
    end 
end 
+0

這適用於我,在我的config/environments/production.rb文件中使用它,以便在應用程序啓動後發生一些ZeroMQ特定的初始化。 –