我正在开发一个使用Juggernaut定期向客户端推送数据的 Rails 应用程序。我使用控制器动作来开始推送;但由于推送通常是一个漫长的过程(10 分钟或更长时间),我使用 spawn 来分叉任务。例如:
def start_pushing
spawn_block(:argv => "juggernaut-pushing") do
for x in y
Juggernaut.publish(stuff in here)
sleep(30) # delay before publishing next item
end
end
end
问题是当我点击 start_pushing 操作时,我在日志文件中发现了这个错误:
spawn> Exception in child[27898] - Redis::InheritedError: Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.
所以我在 spawn_block 中添加了以下内容,希望它能解决问题:
require 'redis'
$redis.client.disconnect
$redis = Redis.new(:host => 'localhost', :port => 6379)
它似乎没有解决它,尽管即使在我将它添加到重置 $redis 之前,该操作一直在间歇性地工作。我在想也许重置 $redis 并没有做任何事情。剑圣仍在访问旧连接。这看起来有可能吗?我如何确保 Juggernaut 使用新的 Redis 连接?
请让我知道有关我所描述内容的任何问题。感谢您的帮助,因为我现在陷入困境。