How do you call a method every hour in Rails?
You should use a cron job for this kind of task.
I suggest you use the Whenever gem.
See railscast here: http://railscasts.com/episodes/164-cron-in-ruby
Since you are already using Resque, I would recommend to use one of the many available Resque plugins: resque-scheduler. Plugs into the Resque UI very nicely as well. Simple setup as explained in the README. Also adds a lot of the missing DelayedJob stuff (delayed execution).
Why I switched from whenever
to resque-scheduler
:
- Stays in the app-folder and doesn't mess with your cron file.
- To stop all 'crons' just disable the Resque workers.
- Exceptions are logged to the Resque UI.
- Manual rescheduling via the Resque UI possible.
- In combination with
resque-loner
you prevent double-execution should a job take longer than the span between two executions. - Still obeys to the priority-system of Resque.
- No additional boot-time (could take up to 60s if your app gets bigger) since it uses Resque's worker-pool.
- One less "tech" used.
- Simple switch: Configuration is done in a cron-like manner.