run cron jobs using sidekiq, resque, delayed_job, or sucker_punch
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
rails
spec
.gitignore
.rspec
.ruby-version
.travis.yml
CHANGES.md
Gemfile
README.md
Rakefile
delayed_cron.gemspec
init.rb

README.md

Build Status Code Climate

DelayedCron

run cron jobs with sidekiq, delayed_job, resque, or sucker_punch

DEPENDENCIES:

  • background process handler: sidekiq, delayed_job, resque, or sucker_punch

INSTALL

gem "delayed_cron", "~> 0.2.9"

USE IN MODEL

class Product < ActiveRecord::Base

  ...

  # Define in Model
  # * this is an alternative to the cron_jobs array in config
  #
  # OPTIONS: *optional
  # - interval  - override default_interval from setup
  # - at        - set time of day the cron should be run, timezone and seconds are optional
  # - time_zone - override default time zone for this job
  # - precision - set to :hourly to run job at an hourly interval instead of daily
  #
  # NOTE: only one of interval or at will be used, at will take precedence if
  # both are specified
  cron_job :some_method_to_run_as_cron, at: "00:00:00 -0400"
  cron_job :some_hourly_job, at: "15:00", precision: :hourly

  def self.some_method_to_run_as_cron
    # this method will be run every every day at midnight
  end

  def self.some_hourly_job
    # this method will be run hourly at fifteen minutes past the hour
  end

  ...

end

CONFIGURE

DelayedCron.setup do |config|

  # default interval to run cron jobs
  config.default_interval = 10.minutes

  # default time zone for scheduling `:at` jobs
  # accepts an ActiveSupport or TZInfo time zone name
  config.default_time_zone = "Eastern Time (US & Canada)"


  # array of methods to run at the above configured interval
  config.cron_jobs = [
    "SomeClass.expensive_task", # will run at default interval
    { job: "AnotherClass.other_expensive_task", interval: 1.hour } # override default
  ]

end

NOTES:

  • when using with sidekiq and rails there can be a config/initializer load order issue. Below is a fix to insure sidekiq is loaded first
Rails.application.config.after_initialize do
  DelayedCron.setup do |config|
    ...
  end
end

This initializes dealyed cron after all other initializers have loaded.

TO DO:

  • add support for Resque