2013-07-03 20 views
2

我正在嘗試將Resque工作人員添加到Heroku應用程序中。該應用程序運行完全在我的開發環境,但是當我部署到Heroku的,並嘗試隊列中的作業,我得到如下:如何解決Redis :: InheritedError - 「試圖在不重新連接的情況下使用來自子進程的連接。」

Redis::InheritedError Error 
Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking. 

我已經添加RedisToGo到應用程序,我已經翻了一番覈對那the Redis URL is being given to Resque。也就是說,/config/initializers/redis.rb看起來是這樣的:

uri = URI.parse(ENV["REDISTOGO_URL"] || "redis://localhost:6379/") 
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password) 
Resque.redis = REDIS 

有誰知道我可能是做錯了什麼?

回答

0

當我問到這個問題,我試圖在運行我Resque工人分開Heroku dyno。最後,我放棄了這種方法,並嘗試使用Unicorn在與我的網絡服務器相同的測試中運行它們。我按照設置說明here,一切正常。

1

@ dB`有2路,你可以做到這一點

一)升級Resque我想這解決這個問題,因爲它們在內部做了重新連接檢查thisthis

現在上述問題是因爲你的工作基本上是一個子進程,並且子進程繼承了來自父進程的所有打開的連接(redis連接)現在,當你的工作完成時,關閉所有打開的連接,即使你的工作人員共享redis連接,因此上述錯誤

其中導致給第二個解決方案 如果你沒有升級resque在腦中也許下面的解決方案將工作

b)試圖創建一個新的連接/重新連接現有的redis連接在resque hooks之前/你能幫我相信

這樣Redis的連接不會消失,即使孩子過程中存在

希望這有助於

+0

非常感謝Viren的回答。最後,我採用了不同的解決方案,但我非常感謝您的解釋。 –

相關問題