如果代码执行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 客户端
他们两个都不适合我。