1

如果代码执行redis相关函数,会引发

Redis::InheritedError: 试图使用来自子进程的连接而不重新连接。分叉后需要重新连接到 Redis。

当 redis 连接时,它将 spork process.pid 保存为@pid,然后 redis 执行它将检查连接使用ensure_connected,这将检查通过Process.pid != @pid。而且这两个 pid 不同,所以会引发 Redis::InheritedError。

通过谷歌它,

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

并在每个规范中重新连接 redis 客户端

他们两个都不适合我。

4

3 回答 3

1

我在这里找到了解决方案,它对我有用:Hacki.ly

看起来这是在您的 spec_helper.rb 中添加以下内容的问题:

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

您可能需要更改$redis为您使用的任何内容来获取对 Redis 实例的引用。

于 2013-04-22T14:33:33.323 回答
0

我可以通过将以下内容添加到 spec_helper.rb 来解决此问题:

Spork.each_run do
  $redis.client.reconnect
end

此外,正如 Gabe 的回答中提到的,您可能需要更改$redis为您使用的任何内容来获取对 Redis 实例的引用。

于 2013-06-28T16:29:31.520 回答
0

将redis升级到2.6.12后,问题解决。

于 2013-05-07T10:25:43.010 回答