Question

I'm adding Resque-Scheduler in my app on Heroku

So... I need ONE alone and distinct worker acting as the scheduler and many doing the jobs.

This is how I've done it :
I've a distinct Heroku App which does nothing but has 1 resque-scheduler worker, running 24/7, adding Resque tasks to the Redis DB of the "distant" main App.

(I do that mapping jobs:work task to resque:scheduler or resque:work)

Is this the best way to do it on the Heroku's platform ; or am I doing it totally wrong ?

Thanks !

EDIT: minimal app for scheduling on Heroku : http://github.com/clmntlxndr/heroku-scheduler

UPDATE: With the new CEDAR stack on Heroku and Procfiles, it's possible to start a distinct task for each worker.

web:        bundle exec rails server -p $PORT
scheduler:  bundle exec rake resque:scheduler
worker:     bundle exec rake jobs:work

http://devcenter.heroku.com/articles/procfile

Was it helpful?

Solution

I think I misread your question the first time. I missed the part where scheduler requires a separate rake task.

Yes, I think the only way to do it is to have two separate heroku apps, because heroku workers will only run rake jobs:work and presumably you can only map this onto one of the resque rake tasks.

You could try this:

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => ["resque:work", "resque:scheduler"]

But I have sincere doubts about that actually working properly with how Heroku monitors worker processes and stuff. Also, double check the rake syntax there; it's just from memory. I know it's possible to specify multiple dependencies though.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top