那是一段时间以来resque中的大问题之一看看这里看看这里
fork
退出时类似于mysql连接消失的问题
它关闭了所有它的连接只是这里的区别是它而不是mysql
它redis
所以情况是这样的
#### Resque main worker
redis = Redis.new
while(true) do
#### Parent redis connection
redis.blpop(* queue_name)
#### redis queue are polled and message are consumed
#### Resque internally fork to performer the task
fork {
#### This fork used the redis connection from the main worker
#### On exit the fork close the redis connection
##### Perform the background task
}
end
## On Main Worker when the the resque try to use the same connection that was closed it raise the above error
如何解决这个问题
有多种方法可以解决这个问题
a) 更新 resque (花了一段时间,但现在补丁更新是 resque )看这里
b)如果您没有查看更新,那么您可以使用类似这样的 resque_hooks 来实现此目的
Resque.after_fork do
Resque.redis.client.reconnect
end
c) 升级 Redis 服务器:- 这完全可以确定,但我注意到 Redis 2.4.6 不确定版本,虽然重新连接是通过 redis 内部实现的(不确定它是 redis 还是 redis 客户端,但认为重新连接是肯定的隐式发生)
希望这有帮助