No commit activity in last 3 years
No release in over 3 years
Allows to start DJ in the same process using Thread.new { ... }
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.16
>= 0
~> 10.0
~> 2.5.3

Runtime

< 4.2, >= 3.0
 Project Readme

Delayed::Threaded

Allows to start DJ in the same process using Thread.new { ... }

Extracted from JRuby-Rack-Worker: an effort to run Ruby workers in threads with Java (JRuby-Rack) deployments (previously known as Delayed::JRubyWorker).

NOTE: JRuby only, for now (PRs welcome)!

Installation

gem 'delayed-threaded'

and bundle or install it yourself as gem install delayed-threaded.

Usage

def start_worker
  options = { :quiet => true }
  if read_ahead = ENV['READ_AHEAD'] # DEFAULT_READ_AHEAD = 5
    options[:read_ahead] = read_ahead.to_i
  end
  if sleep_delay = ENV['SLEEP_DELAY'] # DEFAULT_SLEEP_DELAY = 5
    options[:sleep_delay] = sleep_delay.to_f
  end

  # some options are set to work per-thread (as a thread-local).
  worker = Delayed::Threaded::Worker.new(options)
  worker.start
rescue Exception => e
  msg = "FATAL #{e.inspect}"
  if backtrace = e.backtrace
    msg << ":\n  #{backtrace.join("\n  ")}"
  end
  STDERR.puts(msg)
end

# while other options are global and do not make sense to be set per-thread
Delayed::Worker.queues = (ENV['QUEUES'] || ENV['QUEUE'] || '').split(',')
Delayed::Worker.min_priority = ENV['MIN_PRIORITY'] if ENV['MIN_PRIORITY']
Delayed::Worker.max_priority = ENV['MAX_PRIORITY'] if ENV['MAX_PRIORITY']

Thread.new { start_worker }

ActiveRecord

There's an optional integration with the ActiveRecord backend, to clear the connections after work (as the worker sleeps), setup as a plugin using :

require 'delayed/active_record/release_connection_plugin.rb'

and a somehow fail-"safer" lock clearing mechanism in case of backend errors

# Replace DJ's default ClearLocks plugin with a fail-safe version 
# e.g. when a connection goes down in the middle of job processing, 
# `Delayed::Job.clear_locks!` causes a double fault to propagate.
require 'delayed/fail_safe/clear_locks_plugin.rb'

NOTE: delayed_job might not be the right tool for a fail-safe worker job.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test 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.

Copyright

Copyright (c) 2018 Karol Bucek. See LICENSE (http://en.wikipedia.org/wiki/MIT_License) for details.