Rekiq
Rekiq is a recurring worker extension for Sidekiq.
Rekiq extends Sidekiq and adds functionality to schedule recurring workers.
Sidekiq is an amazing gem that allows us delegate time consuming work to a worker, or even to schedule a time for the worker to start. Now wouldn't it be nice if it also allowed us to schedule a worker to do work recurringly? That's what rekiq purposes to do.
In pratical means, rekiq allows you to schedule a worker to repeat the same work friday at 23:00, for example.
Requirements
Tested with:
- Ruby version 2.1.1, 2.0.0 and 1.9.3
- Sidekiq 3.2.1
- ice_cube 0.12.1
Installation
Add this line to your application's Gemfile:
gem 'rekiq', git: 'https://github.com/junhanamaki/rekiq'
And then execute:
$ bundle
Or compile source by hand, since for now it's not published.
Usage
Require rekiq after sidekiq:
require 'sidekiq'
require 'rekiq'
We need a 'schedule' object (responsible for returning the time at which the worker should start) which must respond to method next_occurrence and receives one argument of type Time more at schedule. For our example we'll use gem ice_cube (don't forget to require it):
# define worker as normal
class ExampleWorker
include Sidekiq::Worker
def perform(arg1, arg2)
# Do some work
end
end
# create schedule for worker to repeat every friday at 2am
schedule = IceCube::Schedule.new do |s|
s.rrule IceCube::Rule.daily.day(:friday).hour_of_day(2)
end
# now just start your worker
ExampleWorker.perform_recurringly(schedule, 'argument_1', 'argument_2')
You can use your own schedule object, configure worker to reschedule before or after work is done, set margin, and much more! So please check wiki for more details.
Contributing
- Fork it ( https://github.com/[my-github-username]/rekiq/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request

