1

コードがredis関連の関数を実行すると、発生します

Redis::InheritedError: 再接続せずに子プロセスからの接続を使用しようとしました。フォーク後に Redis に再接続する必要があります。

redis 接続時に spork の process.pid を @pid として保存し、次に redis を実行して を使用して接続をensure_connectedチェックし、 によってチェックしProcess.pid != @pidます。これら 2 つの pid は異なるため、Redis::InheritedError が発生します。

グーグルで、

Resque.after_fork do 
  Resque.redis.client.reconnect
end

仕様ごとにredisクライアントを再接続します

どちらも私にはうまくいきません。

4

3 に答える 3

1

ここで解決策を見つけましたが、うまくいきました:Hacki.ly

spec_helper.rb に以下を追加するだけの問題のようです:

RSpec.configure do |config| 
  # ... 
  config.before :all do
    $redis.client.reconnect 
  end 
  # ... 
end

$redisRedis インスタンスへの参照を取得するために使用しているものに変更する必要がある場合があります。

于 2013-04-22T14:33:33.323 に答える
0

spec_helper.rb に以下を追加することで、これを修正できました。

Spork.each_run do
  $redis.client.reconnect
end

$redisまた、Gabe の回答で述べたように、Redis インスタンスへの参照を取得するために使用しているものに変更する必要がある場合があります。

于 2013-06-28T16:29:31.520 に答える
0

redis を 2.6.12 にアップグレードした後、問題は解決しました。

于 2013-05-07T10:25:43.010 に答える