1

redisワーカーとして使用するインスタンスを設定しました。すべてのポートが開いています。私が発行するとき

library("doRedis")
redisWorker(host="ZZZ-23-20-XXX-XXX.compute-1.amazonaws.com", queue="jobs")

エラーが発生します

Error in socketConnection(host, port, open = "a+b", blocking = TRUE, timeout = timeout) : 
  cannot open the connection
In addition: Warning message:
In socketConnection(host, port, open = "a+b", blocking = TRUE, timeout = timeout) :
  ZZZ-23-20-XXX-XXX.compute-1.amazonaws.com:6379 cannot be opened

何が起こっているのか考えてみませんか?また、内部EC2 IP(10.XXX.XXX.ZZZ)を使用しても、同じエラーが発生します。サーバーは稼働中でありping

私は最新かつ最高のR、doRedis、Ubuntu12.04をすべて完全に更新して実行しています。これは以前に議論されましたが、解決策は見つかりませんでした。Ubuntu Linux、R、およびRStudioで奇妙なソケット接続エラーが発生したdoRedis

4

1 に答える 1

2

タイムアウトを設定できないため、registerDoRedis()でも同様の問題が発生しました。問題は、関数'redisConnect'で使用されるタイムアウト値にあると思います。

Rでfix(redisConnect)を実行し、タイムアウトのデフォルトが次のようになっていることがわかります。

redisConnect <-関数(host = "localhost"、port = 6379、returnRef = FALSE、timeout = 2147483647L)

この巨大なタイムアウト値が問題を引き起こしているようです。チェックするには、これから使用される行で変更します。

con <- socketConnection(host, port, open = "a+b", blocking = TRUE, 
    timeout = timeout)

これに:

con <- socketConnection(host, port, open = "a+b", blocking = TRUE, 
    timeout = 30)

パッケージをリロードするとすぐに変更が消去されますが、これは機能することがわかりました。私は今日これを見つけたので、開発者にバグを提出します。ちなみに私はOSXでR2.15を実行しています。

使用している関数は、デフォルトでタイムアウト30に設定する必要があります。または、基になるコードをfix()するのではなく、関数呼び出しで設定してみてください。

于 2012-11-27T18:12:57.337 に答える