Как изящно обработать сбой кэша Rails? (Redis-кэш)

Я использую redis-cache для кэширования фрагментов в моем приложении. Когда redis не работает или недоступен, я получаю исключения тайм-аута, которые вызывают 500 ошибок.

Это случается редко, но для кеша я бы ожидал, что 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' 

1 ответ

Кевин,

Любопытно, какую версию 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, я не вижу включенного исправления.

Другие вопросы по тегам