delayed_job 4.1.13 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/delayed_job.gemspec +3 -1
- data/lib/active_job/queue_adapters/delayed_job_adapter.rb +52 -0
- data/lib/delayed/railtie.rb +9 -0
- data/spec/active_job_adapter_spec.rb +110 -0
- metadata +34 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ae0a826ebddefa73dc33ce40c1fb057cda95951144e347835ca17829ead8c8f5
|
|
4
|
+
data.tar.gz: 2fcd3abb457bcdf72b31247dbb76fd77646a1530a2fdceed10d31e061f14e6f1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a5ac2118e954f040b0820a2ba7d06b51fb3c1cd420e671b0d7af6d69918fe5279f80a44183ee1d2b5d67a9b5b155f76c5b183e828aeb11793a016d13d3ed7c5e
|
|
7
|
+
data.tar.gz: f075ae005041db3928fc2edf4f044834db426bf816841fc443ddfd29a5f27037a78d41a1fe9f948200ee0fb7ffee79ed4e75b8067b415e30697b1d464bb31f2c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
4.2.0 - 2025-12-29
|
|
2
|
+
=======================
|
|
3
|
+
* Add dependencies for benchmark and logger which are moving out of stdlib.
|
|
4
|
+
* Pull ActiveJob adapter from rails into DJ for future rails release.
|
|
5
|
+
* Add Ruby 4.0 and Rails 8.1 to test matrix.
|
|
6
|
+
|
|
1
7
|
4.1.13 - 2024-11-08
|
|
2
8
|
=======================
|
|
3
9
|
* Enable Rails 8
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
**If you're viewing this at https://github.com/collectiveidea/delayed_job,
|
|
2
2
|
you're reading the documentation for the master branch.
|
|
3
3
|
[View documentation for the latest release
|
|
4
|
-
(4.
|
|
4
|
+
(4.2.0).](https://github.com/collectiveidea/delayed_job/tree/v4.2.0)**
|
|
5
5
|
|
|
6
6
|
Delayed::Job
|
|
7
7
|
============
|
data/delayed_job.gemspec
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |spec|
|
|
4
4
|
spec.add_dependency 'activesupport', ['>= 3.0', '< 9.0']
|
|
5
|
+
spec.add_dependency 'benchmark'
|
|
6
|
+
spec.add_dependency 'logger'
|
|
5
7
|
spec.authors = ['Brandon Keepers', 'Brian Ryckbost', 'Chris Gaffney', 'David Genord II', 'Erik Michaels-Ober', 'Matt Griffin', 'Steve Richert', 'Tobias Lütke']
|
|
6
8
|
spec.description = 'Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.'
|
|
7
9
|
spec.email = ['brian@collectiveidea.com']
|
|
@@ -13,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
|
13
15
|
spec.require_paths = ['lib']
|
|
14
16
|
spec.summary = 'Database-backed asynchronous priority queue system -- Extracted from Shopify'
|
|
15
17
|
spec.test_files = Dir.glob('spec/**/*')
|
|
16
|
-
spec.version = '4.
|
|
18
|
+
spec.version = '4.2.0'
|
|
17
19
|
spec.metadata = {
|
|
18
20
|
'changelog_uri' => 'https://github.com/collectiveidea/delayed_job/blob/master/CHANGELOG.md',
|
|
19
21
|
'bug_tracker_uri' => 'https://github.com/collectiveidea/delayed_job/issues',
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
|
2
|
+
|
|
3
|
+
module ActiveJob
|
|
4
|
+
module QueueAdapters
|
|
5
|
+
# = Delayed Job adapter for Active Job
|
|
6
|
+
#
|
|
7
|
+
# To use Delayed Job, set the queue_adapter config to +:delayed_job+.
|
|
8
|
+
#
|
|
9
|
+
# Rails.application.config.active_job.queue_adapter = :delayed_job
|
|
10
|
+
class DelayedJobAdapter < ::ActiveJob::QueueAdapters::AbstractAdapter
|
|
11
|
+
def enqueue(job)
|
|
12
|
+
delayed_job = Delayed::Job.enqueue(JobWrapper.new(job.serialize), :queue => job.queue_name, :priority => job.priority)
|
|
13
|
+
job.provider_job_id = delayed_job.id
|
|
14
|
+
delayed_job
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def enqueue_at(job, timestamp)
|
|
18
|
+
delayed_job = Delayed::Job.enqueue(JobWrapper.new(job.serialize), :queue => job.queue_name, :priority => job.priority, :run_at => Time.at(timestamp))
|
|
19
|
+
job.provider_job_id = delayed_job.id
|
|
20
|
+
delayed_job
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class JobWrapper
|
|
24
|
+
attr_accessor :job_data
|
|
25
|
+
|
|
26
|
+
def initialize(job_data)
|
|
27
|
+
@job_data = job_data
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def display_name
|
|
31
|
+
base_name = "#{job_data['job_class']} [#{job_data['job_id']}] from DelayedJob(#{job_data['queue_name']})"
|
|
32
|
+
|
|
33
|
+
return base_name unless log_arguments?
|
|
34
|
+
|
|
35
|
+
"#{base_name} with arguments: #{job_data['arguments']}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def perform
|
|
39
|
+
Base.execute(job_data)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def log_arguments?
|
|
45
|
+
job_data['job_class'].constantize.log_arguments?
|
|
46
|
+
rescue NameError
|
|
47
|
+
false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
data/lib/delayed/railtie.rb
CHANGED
|
@@ -3,6 +3,15 @@ require 'rails'
|
|
|
3
3
|
|
|
4
4
|
module Delayed
|
|
5
5
|
class Railtie < Rails::Railtie
|
|
6
|
+
initializer 'delayed_job.active_job' do
|
|
7
|
+
ActiveSupport.on_load(:active_job) do
|
|
8
|
+
# Use Rails packaged adpater if present
|
|
9
|
+
unless defined?(ActiveJob::QueueAdapters::DelayedJobAdapter)
|
|
10
|
+
require 'active_job/queue_adapters/delayed_job_adapter'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
6
15
|
initializer :after_initialize do
|
|
7
16
|
Delayed::Worker.logger ||= if defined?(Rails)
|
|
8
17
|
Rails.logger
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
if ActiveSupport.gem_version >= Gem::Version.new('8.1.0.alpha')
|
|
4
|
+
require 'active_job'
|
|
5
|
+
require 'concurrent'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe 'a Rails active job backend' do
|
|
9
|
+
before do
|
|
10
|
+
if ActiveSupport.gem_version < Gem::Version.new('8.1.0.alpha')
|
|
11
|
+
skip("Bundled adapter used in #{ActiveSupport.gem_version}")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
if ActiveSupport.gem_version >= Gem::Version.new('8.1.0.alpha')
|
|
16
|
+
module JobBuffer
|
|
17
|
+
@values = Concurrent::Array.new
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
def clear
|
|
21
|
+
@values.clear
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def add(value)
|
|
25
|
+
@values << value
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def values
|
|
29
|
+
@values.dup
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class TestJob < ActiveJob::Base
|
|
35
|
+
queue_as :integration_tests
|
|
36
|
+
|
|
37
|
+
def perform(message)
|
|
38
|
+
JobBuffer.add(message)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
let(:worker) { Delayed::Worker.new(:sleep_delay => 0.5, :queues => %w[integration_tests]) }
|
|
44
|
+
|
|
45
|
+
before do
|
|
46
|
+
JobBuffer.clear
|
|
47
|
+
Delayed::Job.delete_all
|
|
48
|
+
ActiveJob::Base.queue_adapter = :delayed_job
|
|
49
|
+
ActiveJob::Base.logger = nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should supply a wrapped class name to DelayedJob' do
|
|
53
|
+
TestJob.perform_later
|
|
54
|
+
job = Delayed::Job.all.last
|
|
55
|
+
expect(job.name).to match(/TestJob \[[0-9a-f-]+\] from DelayedJob\(integration_tests\) with arguments: \[\]/)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'enqueus and executes the job' do
|
|
59
|
+
TestJob.perform_later('Rails')
|
|
60
|
+
worker.work_off
|
|
61
|
+
expect(JobBuffer.values).to eq(['Rails'])
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should queue the job on the correct queue' do
|
|
65
|
+
old_queue = TestJob.queue_name
|
|
66
|
+
begin
|
|
67
|
+
TestJob.queue_as :some_other_queue
|
|
68
|
+
TestJob.perform_later 'Rails'
|
|
69
|
+
expect(Delayed::Job.all.last.queue).to eq('some_other_queue')
|
|
70
|
+
ensure
|
|
71
|
+
TestJob.queue_name = old_queue
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'runs multiple queued jobs' do
|
|
76
|
+
ActiveJob.perform_all_later(TestJob.new('Rails'), TestJob.new('World'))
|
|
77
|
+
worker.work_off
|
|
78
|
+
expect(JobBuffer.values).to eq(%w[Rails World])
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'should not run job enqueued in the future' do
|
|
82
|
+
TestJob.set(:wait => 5.seconds).perform_later('Rails')
|
|
83
|
+
|
|
84
|
+
worker.work_off
|
|
85
|
+
|
|
86
|
+
expect(JobBuffer.values.empty?).to eq true
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'should run job enqueued in the future at the specified time' do
|
|
90
|
+
TestJob.set(:wait => 5.seconds).perform_later('Rails')
|
|
91
|
+
|
|
92
|
+
expect(Delayed::Job.all.last.run_at).to within(1.second).of(5.seconds.from_now)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should run job bulk enqueued in the future at the specified time' do
|
|
96
|
+
ActiveJob.perform_all_later([TestJob.new('Rails').set(:wait => 5.seconds)])
|
|
97
|
+
|
|
98
|
+
expect(Delayed::Job.all.last.run_at).to within(1.second).of(5.seconds.from_now)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'should run job with higher priority first' do
|
|
102
|
+
wait_until = Time.now
|
|
103
|
+
TestJob.set(:wait_until => wait_until, :priority => 20).perform_later '1'
|
|
104
|
+
TestJob.set(:wait_until => wait_until, :priority => 10).perform_later '2'
|
|
105
|
+
|
|
106
|
+
worker.work_off
|
|
107
|
+
|
|
108
|
+
expect(JobBuffer.values).to eq(%w[2 1])
|
|
109
|
+
end
|
|
110
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: delayed_job
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brandon Keepers
|
|
@@ -12,10 +12,9 @@ authors:
|
|
|
12
12
|
- Matt Griffin
|
|
13
13
|
- Steve Richert
|
|
14
14
|
- Tobias Lütke
|
|
15
|
-
autorequire:
|
|
16
15
|
bindir: bin
|
|
17
16
|
cert_chain: []
|
|
18
|
-
date:
|
|
17
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
19
18
|
dependencies:
|
|
20
19
|
- !ruby/object:Gem::Dependency
|
|
21
20
|
name: activesupport
|
|
@@ -37,6 +36,34 @@ dependencies:
|
|
|
37
36
|
- - "<"
|
|
38
37
|
- !ruby/object:Gem::Version
|
|
39
38
|
version: '9.0'
|
|
39
|
+
- !ruby/object:Gem::Dependency
|
|
40
|
+
name: benchmark
|
|
41
|
+
requirement: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
type: :runtime
|
|
47
|
+
prerelease: false
|
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '0'
|
|
53
|
+
- !ruby/object:Gem::Dependency
|
|
54
|
+
name: logger
|
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '0'
|
|
60
|
+
type: :runtime
|
|
61
|
+
prerelease: false
|
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '0'
|
|
40
67
|
description: Delayed_job (or DJ) encapsulates the common pattern of asynchronously
|
|
41
68
|
executing longer tasks in the background. It is a direct extraction from Shopify
|
|
42
69
|
where the job table is responsible for a multitude of core tasks.
|
|
@@ -56,6 +83,7 @@ files:
|
|
|
56
83
|
- contrib/delayed_job_rails_4.monitrc
|
|
57
84
|
- contrib/delayed_job_rails_4_multiple.monitrc
|
|
58
85
|
- delayed_job.gemspec
|
|
86
|
+
- lib/active_job/queue_adapters/delayed_job_adapter.rb
|
|
59
87
|
- lib/delayed/backend/base.rb
|
|
60
88
|
- lib/delayed/backend/job_preparer.rb
|
|
61
89
|
- lib/delayed/backend/shared_spec.rb
|
|
@@ -81,6 +109,7 @@ files:
|
|
|
81
109
|
- lib/generators/delayed_job/delayed_job_generator.rb
|
|
82
110
|
- lib/generators/delayed_job/templates/script
|
|
83
111
|
- recipes/delayed_job.rb
|
|
112
|
+
- spec/active_job_adapter_spec.rb
|
|
84
113
|
- spec/autoloaded/clazz.rb
|
|
85
114
|
- spec/autoloaded/instance_clazz.rb
|
|
86
115
|
- spec/autoloaded/instance_struct.rb
|
|
@@ -106,7 +135,6 @@ metadata:
|
|
|
106
135
|
changelog_uri: https://github.com/collectiveidea/delayed_job/blob/master/CHANGELOG.md
|
|
107
136
|
bug_tracker_uri: https://github.com/collectiveidea/delayed_job/issues
|
|
108
137
|
source_code_uri: https://github.com/collectiveidea/delayed_job
|
|
109
|
-
post_install_message:
|
|
110
138
|
rdoc_options: []
|
|
111
139
|
require_paths:
|
|
112
140
|
- lib
|
|
@@ -121,11 +149,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
121
149
|
- !ruby/object:Gem::Version
|
|
122
150
|
version: '0'
|
|
123
151
|
requirements: []
|
|
124
|
-
rubygems_version:
|
|
125
|
-
signing_key:
|
|
152
|
+
rubygems_version: 4.0.3
|
|
126
153
|
specification_version: 4
|
|
127
154
|
summary: Database-backed asynchronous priority queue system -- Extracted from Shopify
|
|
128
155
|
test_files:
|
|
156
|
+
- spec/active_job_adapter_spec.rb
|
|
129
157
|
- spec/autoloaded/clazz.rb
|
|
130
158
|
- spec/autoloaded/instance_clazz.rb
|
|
131
159
|
- spec/autoloaded/instance_struct.rb
|