2

私はかなり長い間このエラーに苦労してきました:

Redis::ProtocolError: Got 'i' as initial reply byte. 
If you're running in a multi-threaded environment, make sure you pass the :thread_safe
option when initializing the connection. If you're in a forking environment, such as 
Unicorn, you need to connect to Redis after forking.

Unicorn と Redis を使用するアプリで断続的に発生します。このredis-rb Github の問題:thread_safeから、オプションがデフォルトで有効になっているように見えます。の最新バージョンと互換性がないredis 2.2.2ため、使用しています。redis 3.0.1resque

私のユニコーン設定ではRedis.current.quit、フォーク後に使用しています。

ruote-redisまた、ワークフロー エンジン Ruote のストレージ実装である gem を使用して Redis に接続しています。

すべての Redis 接続が安定しており、アプリの通常の使用を妨げるこのエラーが発生しないようにするにはどうすればよいですか?

4

1 に答える 1

2

Unicorn はマルチスレッドではありません。自分でスレッドを使用していますか?

ドキュメントに記載されているように、あなたが直面している問題は、複数の Unicorn ワーカーが同じ接続 (つまり、同じ基になるファイル記述子) を共有していることです。

バージョン redis-rb 3.0 に含まれるこの変更により、さらに明確になります。

それでもこのエラーが発生する場合は、Unicorn の構成を投稿してください。

于 2012-06-19T02:00:25.557 に答える