0

我正在使用 Resque 1.22.0,Resque-status 0.3.3 并且一切正常。如果我包含了rescue-ui gem,我会得到错误(来自队列):

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

从 rake 任务代码中删除 resque-ui 并将其留在前台可以正常工作。有谁知道如何解决这个问题:非常烦人......

4

2 回答 2

0

尝试识别 resque 进程 ID,将其杀死并重新启动 resque 服务器。

此外,您可以尝试以下

Redis.current.client.reconnect
$redis = Redis.current
于 2014-11-25T07:54:33.040 回答
0

那是一段时间以来resque中的大问题之一看看这里看看这里

fork退出时类似于mysql连接消失的问题

它关闭了所有它的连接只是这里的区别是它而不是mysqlredis

所以情况是这样的

#### 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 客户端,但认为重新连接是肯定的隐式发生)

希望这有帮助

于 2012-10-28T16:46:55.027 回答