forked from rails/mission_control-jobs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththread_safe_redis.rb
More file actions
34 lines (27 loc) · 903 Bytes
/
thread_safe_redis.rb
File metadata and controls
34 lines (27 loc) · 903 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Set and access +Resque.redis+ in a thread-safe way.
module Resque::ThreadSafeRedis
thread_mattr_accessor :thread_resque_override
def self.resque_override
self.thread_resque_override ||= ResqueOverride.new
end
def redis
Resque::ThreadSafeRedis.resque_override.data_store_override || super
end
alias :data_store :redis
def with_per_thread_redis_override(redis_instance, &block)
Resque::ThreadSafeRedis.resque_override.enable_with(redis_instance, &block)
end
class ResqueOverride
include Resque
attr_accessor :data_store_override
def enable_with(server, &block)
previous_redis, previous_data_store_override = redis, data_store_override
self.redis = server
self.data_store_override = @data_store
block.call
ensure
self.redis = previous_redis
self.data_store_override = previous_data_store_override
end
end
end