Merge pull request #421 from cristiangreco/cristian/redis-cache-store-failsafe

Failsafe on Redis error replies in RedisCacheStoreProxy.
This commit is contained in:
Gonzalo Rodriguez 2019-07-15 18:47:17 -03:00 committed by GitHub
commit dc305e0782
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -15,17 +15,33 @@ module Rack
#
# So in order to workaround this we use RedisCacheStore#write (which sets expiration) to initialize
# the counter. After that we continue using the original RedisCacheStore#increment.
if options[:expires_in] && !read(name)
write(name, amount, options)
rescuing do
if options[:expires_in] && !read(name)
write(name, amount, options)
amount
else
super
amount
else
super
end
end
end
def read(*_args)
rescuing { super }
end
def write(name, value, options = {})
super(name, value, options.merge!(raw: true))
rescuing do
super(name, value, options.merge!(raw: true))
end
end
private
def rescuing
yield
rescue Redis::BaseError
nil
end
end
end