4

Sorry if my question already exist and solved here, but nothing helps me. I have rails app. I have Resque working well. Now I want to make rescue-scheduler works with my delayed tasks. For example i want to send email with 30 seconds delay. My Gemfile:

...
gem 'resque'
gem 'resque-scheduler'
...

resque.rb:

uri = URI.parse("redis://localhost:6379/")
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)

Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }

resque.rake:

require 'resque/tasks'
require 'resque/scheduler/tasks'

task :scheduler_environment do
  Resque::Scheduler.dynamic = true
end

task 'resque:scheduler_setup' => :scheduler_environment
task 'resque:setup' => :environment

task "resque:setup" do
  ENV['QUEUE'] = '*'
end

deploy.rb:

...
task :start_workers do
  queue 'echo "-----> Start resque-workers"'
  queue "cd #{app_path} && RAILS_ENV=#{rails_env} && touch resque.pid"
  queue "cd #{app_path} && RAILS_ENV=production bundle exec rake resque:work QUEUE=* BACKGROUND=yes TERM_CHILD=1"
  queue 'echo "-----> Start resque-scheduler"'
  queue "cd #{app_path} && RAILS_ENV=production bundle exec rake resque:scheduler BACKGROUND=yes DYNAMIC_SCHEDULE=true"
end
...

So when i run: Resque.enqueue(TestJob, 'now job') it works well^ but when i run: Resque.enqueue_in(15.seconds, TestJob, '15 sec delayed job') nothing happens until next deploy:

-----> Duplicating Unicorn...
-----> Start resque-workers
-----> Start resque-scheduler
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Starting
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Reloading Schedule
-----> Start clockwork
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Loading Schedule
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Schedule empty! Set Resque.schedule
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Schedules Loaded
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Processing Delayed Items
clockworkd.production: pid file: /home/deployer/server/shared/tmp/pids/clockworkd.production.pid
clockworkd.production: output log file: /home/deployer/server/shared/log/clockworkd.production.output
clockworkd.production: process with pid 23911 started.
-----> Done. Deployed v37

So how can I set up my rescue-scheduler to run my delayed tasks on the fly?

p.s. When I run:

RAILS_ENV=production bundle exec rake resque:scheduler BACKGROUND=yes DYNAMIC_SCHEDULE=true

on my production server through console, I got rescue-scheduler working well and it's handle all new delayed tasks as I wanted

Garegin S
  • 51
  • 3
  • Seems like an issue with clockwork. The clockworks gets activated on every deploy, so whatever is on the queue with a scheduled clock, will run after deploy. – sidegeeks Jan 15 '16 at 10:24
  • But i don't use clockwork tasks now. I switched it off in deploy.rb and tried again. Resque-scheduler doesn't work on the fly – Garegin S Jan 15 '16 at 10:39
  • When i run resque-scheduler in production console - it works and handles my delayed tasks. But after deploy it runs ones – Garegin S Jan 15 '16 at 11:17

0 Answers0