This gem is intended to be a plug-and-play solution for running sidekiq-scheduler in a multi-host environment. It relies on Sidekiq's Redis instance for storing a heartbeat, rufus-scheduler (a depedency of sidekiq-scheduler) for the actual heartbeating, and Sidekiq for running a task called Defibrillator which will cause another host to take over if the current scheduler goes down.
Add this line to your application's Gemfile:
gem 'sidekiq-scheduler-multihost', require: sidekiq_scheduler_multihost
And then execute:
Or install it yourself as:
$ gem install sidekiq-scheduler-multihost
Just include the gem and it will set up the heartbeat, place a defibrillator job in the queue, and start sidekiq-scheduler. You will still need to load the schedule yourself, with an initializer that does something like:
config.on(:startup) do Sidekiq.schedule = YAML.load_file(File.expand_path("../../scheduler.yml",__FILE__)) end
See the sidekiq-scheduler and sidekiq docs for more information.
There could be a race condition, if multiple hosts write the exact same heartbeat timestamp at the exact same time. It's not likely as the resolution is pretty high but it could happen.
There's not currently a way to configure the heartbeat frequency.
When the host that is running the schedule dies, no schedule will be run for a period of time up to two heartbeats. Heartbeats happen every 30 seconds currently.
After checking out the repo, run
bin/setup to install dependencies. Then, run
rake spec to run the tests. You can also run
bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run
bundle exec rake install. To release a new version, update the version number in
version.rb, and then run
bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the
.gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/Womply/sidekiq-scheduler-multihost.