resque/resque-scheduler

Uninitialized constant Resque::Scheduler::Redis

dingn1 opened this issue · 8 comments

Seems like after the change in master #636 started to get this error:

NameError: uninitialized constant Resque::Scheduler::Redis
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque/scheduler.rb:17:in `<module:Scheduler>'
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque/scheduler.rb:11:in `<module:Resque>'
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque/scheduler.rb:10:in `<top (required)>'
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque-scheduler.rb:2:in `require_relative'
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque-scheduler.rb:2:in `<top (required)>'
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque/scheduler/tasks.rb:4:in `require'
/var/lib/gems/2.5.0/bundler/gems/resque-scheduler-bbf4930c2802/lib/resque/scheduler/tasks.rb:4:in `<top (required)>'

Not sure what is the problem.

Looks like it's now expecting that redis gem was loaded before redis-scheduler.

Thanks for that suggestion it worked!

I don't understand how to fix this

I think in the code that you require resque-scheduler require redis first

Getting the same with the stand alone version.

➜ resque-scheduler -I config/resque-scheduler.rb
bundler: failed to load command: resque-scheduler (/bundle/bin/resque-scheduler)
NameError: uninitialized constant Resque::Scheduler::Redis
  /bundle/gems/resque-scheduler-4.4.0/lib/resque/scheduler.rb:17:in `<module:Scheduler>'
  /bundle/gems/resque-scheduler-4.4.0/lib/resque/scheduler.rb:11:in `<module:Resque>'
  /bundle/gems/resque-scheduler-4.4.0/lib/resque/scheduler.rb:10:in `<top (required)>'
  /bundle/gems/resque-scheduler-4.4.0/lib/resque-scheduler.rb:2:in `require_relative'
  /bundle/gems/resque-scheduler-4.4.0/lib/resque-scheduler.rb:2:in `<top (required)>'
  /bundle/gems/resque-scheduler-4.4.0/exe/resque-scheduler:4:in `require'
  /bundle/gems/resque-scheduler-4.4.0/exe/resque-scheduler:4:in `<top (required)>'
  /bundle/bin/resque-scheduler:23:in `load'
  /bundle/bin/resque-scheduler:23:in `<top (required)>'

The file config/resque-scheduler.rb has the require 'redis' in first line, but it seems it's ignored.

As far as I can tell the new version was never released with this fix included. Someone correct me if I'm wrong. In the meantime you can work around this by simply creating script:

bin/resque-scheduler

#!/usr/bin/env ruby

# This file is a workaround arund a bug in resque-scheduler.
# Fixed by this PR: https://github.com/resque/resque-scheduler/pull/671/files
# but new version was never released as far as I can tell

require 'rubygems'
require 'redis/errors'
version = '~> 4.4.0'

if Gem.respond_to?(:activate_bin_path)
  load Gem.activate_bin_path('resque-scheduler', 'resque-scheduler', version)
else
  gem "resque-scheduler", version
  load Gem.bin_path("resque-scheduler", "resque-scheduler", version)
end

@swistak what version of resque-scheduler are you on?

I think this is fixed here. If you are using the latest resque-scheduler you should be fine.

Indeed it was fixed in the newest one. I was convinced I'm on newest one. My bad for not double checking. Sorry