2013-04-12 40 views
1

如果代碼EXCUTE redis的相關功能,這將提高叉勺rspec的同時使用Redis的,提高的Redis :: InheritedError

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

當Redis的連接,將保存叉勺process.pid爲@pid,然後Redis的EXCUTE它會檢查連接使用ensure_connected,這將通過Process.pid != @pid檢查。而這兩個pid是不同的,所以它引發了Redis :: InheritedError。

通過谷歌吧,

Resque.after_fork do 
    Resque.redis.client.reconnect 
end 

並重新Redis的客戶每規範

他們都沒有爲我工作。

回答

0

將redis升級到2.6.12後,問題解決了。

1

我發現這裏的解決方案,它爲我工作:Hacki.ly

看起來像它加入你的spec_helper.rb以下的問題:

RSpec.configure do |config| 
    # ... 
    config.before :all do 
    $redis.client.reconnect 
    end 
    # ... 
end 

您可能需要更改$redis到無論你用什麼來獲取對你的Redis實例的引用。

+1

它沒有工作,我以前試過。 :( – wkang

+0

你仍然得到'Redis :: InheritedError'? – Gabe

+0

同樣的問題,對我和建議的解決方案不起作用:( –

0

我能夠通過添加以下到spec_helper.rb解決這個問題:

Spork.each_run do 
    $redis.client.reconnect 
end 

而且在Gabe的答覆中提到,您可能需要更改$redis,無論你正在使用搶來的引用你的Redis實例。