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 はまだ古い接続にアクセスしています。それはありそうですか?Juggernaut が新しい Redis 接続を使用していることを確認するにはどうすればよいですか?
私が説明していることについて質問があれば教えてください。私は今立ち往生しているので、助けに感謝します。