1

アプリのフラグメント キャッシュに redis-cache を使用しています。redis がダウンしているか到達不能な場合、タイムアウト例外が発生し、500 エラーが発生します。

これはめったに発生しませんが、キャッシュの場合、Rails がタイムアウトを次のように処理することを期待します。

  • 書き込み時のノーオペレーション
  • 読み取り時のキャッシュミス。

助言がありますか?これは Rails キャッシングで構成可能なものですか、それともこのケースを適切に処理するためにモンキー パッチを適用する必要がありますか?

何らかの形で役立つ場合に備えて、スタックトレースの関連部分を以下に示します。. .


execution expired
 /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/timeout.rb:60:in `new'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/connection/ruby.rb:26:in `connect'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/connection/ruby.rb:128:in `with_timeout'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/connection/ruby.rb:25:in `connect'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:227:in `establish_connection'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:23:in `connect'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:247:in `ensure_connected'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:137:in `process'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:206:in `logging'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:136:in `process'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:46:in `call'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis.rb:157:in `get'
 /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/monitor.rb:242:in `synchronize'
 bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis.rb:156:in `get'
 bundle/gems/ruby/1.8/gems/redis-store-1.0.0.1/lib/redis/store/interface.rb:5:in `get'
 bundle/gems/ruby/1.8/gems/redis-store-1.0.0.1/lib/redis/store/marshalling.rb:13:in `get'
 bundle/gems/ruby/1.8/gems/redis-store-1.0.0.1/lib/active_support/cache/redis_store.rb:119:in `read_entry' 

4

1 に答える 1

0

ケビン、

興味深いことに、Rails のどのバージョンを使用していますか?

redis-store プロジェクトのこの問題は、あなたが経験していることに関連しているようです: https://github.com/jodosha/redis-store/issues/56。ただし、その修正はRails 3のみに対応しています。

Rails 2 の修正は、https ://github.com/jodosha/redis-store/pull/83 にあります。redis-store 1.0.0.1 のソースを見ると、その修正が含まれているようには見えません。

于 2012-06-01T19:22:34.373 に答える