如果代码执行redis相关功能,则会引发
Redis :: InheritedError:尝试使用子进程的连接而不重新连接。您需要在分叉后重新连接到Redis。
当redis连接时,它会将spork process.pid保存为@pid,然后redis excute它会使用ensure_connected
检查连接,这将通过Process.pid != @pid
进行检查。并且这两个pid是不同的,因此它引发了Redis :: InheritedError。
谷歌,
Resque.after_fork do
Resque.redis.client.reconnect
end
并重新连接每个规范的redis客户端
它们都不适合我。
答案 0 :(得分:1)
我在这里找到了解决方案,它对我有用:Hacki.ly
看起来这是在spec_helper.rb中添加以下内容的问题:
RSpec.configure do |config|
# ...
config.before :all do
$redis.client.reconnect
end
# ...
end
您可能需要将$redis
更改为您正在使用的任何内容,以获取对Redis实例的引用。
答案 1 :(得分:0)
将redis升级到2.6.12后,问题解决了。
答案 2 :(得分:0)
我能够通过在spec_helper.rb中添加以下内容来解决这个问题:
Spork.each_run do
$redis.client.reconnect
end
同样如Gabe的回答所述,您可能需要将$redis
更改为您正在使用的任何内容,以获取对Redis实例的引用。