Recurring jobs for Sucker Punch.
Sucker Punch offers the ability to run background jobs within the web server process. Yes, this means you can host your app on Heroku without paying for an extra dyno for background jobs. However, Sucker Punch does not implement recurring jobs. Enter Fist of Fury!
Fist of Fury is heavily inspired by Sidetiq for Sidekiq. It uses the ice_cube gem for easy creation of recurrence rules.
Add this line to your application's Gemfile:
gem 'fist_of_fury', '~> 0.3.0'
And then execute:
$ bundle
Or install it yourself as:
$ gem install fist_of_fury
Run the install generator, which installs an initializer:
$ rails generate fist_of_fury:install
You can schedule your jobs within the jobs themselves:
class SayHiJob
include SuckerPunch::Job
include FistOfFury::Recurrent
recurs { minutely }
def perform
Rails.logger.info 'Hi!'
end
end
GOTCHA WARNING: If you define the recurrence rules within the job classes themselves, you may run into an issue where your jobs never run in development. By default, Rails does not eager load code in development, and thus will not load your job classes, resulting in your jobs not being scheduled. Either set config.eager_load = true
in development.rb
or reference your job classes somewhere in an initializer (config/fist_of_fury.rb
is a good candidate).
If you did not run the install generator, you need to kick off the process somewhere (like an initializer) with this:
FistOfFury.attack!
You can specify the recurrence rules during kickoff:
FistOfFury.attack! do
LogJob.recurs { secondly(3) }
end
FistOfFury.configure do |config|
config.utc = true # false by default; makes all time within Fist of Fury UTC
end
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)