ruby - Connection Pool returning an instance of Redis and not ConnectionPool -
i trying create rails app utilize resque
managing workers. but, go on using connectionpool gem.
i have in initializer:
puts env["redistogo_url"] uri = (not env["redistogo_url"].nil?) ? uri.parse(env["redistogo_url"]) : nil # @ point, debugger confirms $redis nil $redis = connectionpool::wrapper.new(:size => 5, :timeout => 3) { if uri.nil? redis.connect else redis.connect(:host => uri.host, :port => uri.port, :password => uri.password) end } $redis # set in here debugger # @ point, $redis #<redis:0x007fb1b0036bf0> # when should instance of connectionpool::wrapper
does have thought why $redis
not returned instance connectionpool::wrapper
?
i've searched in gems source code, set value of $redis
. in connectionpool's source code, did not find homecoming instance of redis
instead of itself.
this happens when switched delayedjob resque. so, seem problem. however, i'm @ loss.
i using unicorn. here's file in config
.
worker_processes 2 timeout 30 preload_app true before_fork |server, worker| # replace mongodb or whatever if defined?(activerecord::base) activerecord::base.connection.disconnect! rails.logger.info('disconnected activerecord') end # if using redis not resque, alter if defined?(resque) resque.redis.quit rails.logger.info('disconnected redis') end sleep 1 end after_fork |server, worker| # replace mongodb or whatever if defined?(activerecord::base) activerecord::base.establish_connection rails.logger.info('connected activerecord') end # if using redis not resque, alter if defined?(resque) # yes, commented resque out debugging, still same problem. #resque.redis = env['redistogo_url'] rails.logger.info('connected redis') end end
and finally, procfile:
web: bundle exec unicorn -p $port -c ./config/unicorn.rb worker: env term_child=1 queue=* bundle exec rake resque:work
i'm using foreman
in develop environment.
any help appreciated.
from docs:
you can utilize connectionpool::wrapper wrap single global connection.
i looks connectionpool::wrapper
meant wrap single connection redis convenience migrating big applications using redis straight using connectionpool
s
if phone call $redis.with
, #with
defined connectionpool
to actual connection pool, alter your
connectionpool::wrapper.new(:size => 5, :timeout => 3) { #redis logic }
to
connectionpool.new(:size => 5, :timeout => 3) { #redis logic }
ruby ruby-on-rails-3 redis
No comments:
Post a Comment