activejob 6.0.3.2 → 6.1.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 +74 -147
- data/MIT-LICENSE +1 -1
- data/README.md +1 -3
- data/lib/active_job.rb +1 -1
- data/lib/active_job/base.rb +3 -0
- data/lib/active_job/callbacks.rb +44 -4
- data/lib/active_job/core.rb +3 -2
- data/lib/active_job/enqueuing.rb +3 -13
- data/lib/active_job/exceptions.rb +29 -20
- data/lib/active_job/execution.rb +9 -1
- data/lib/active_job/gem_version.rb +3 -3
- data/lib/active_job/instrumentation.rb +37 -0
- data/lib/active_job/log_subscriber.rb +140 -0
- data/lib/active_job/logging.rb +3 -132
- data/lib/active_job/queue_adapter.rb +3 -0
- data/lib/active_job/queue_adapters.rb +5 -1
- data/lib/active_job/queue_adapters/sucker_punch_adapter.rb +1 -1
- data/lib/active_job/queue_adapters/test_adapter.rb +6 -2
- data/lib/active_job/queue_name.rb +2 -2
- data/lib/active_job/railtie.rb +4 -0
- data/lib/active_job/serializers.rb +4 -1
- data/lib/active_job/serializers/date_time_serializer.rb +1 -5
- data/lib/active_job/serializers/module_serializer.rb +20 -0
- data/lib/active_job/serializers/object_serializer.rb +1 -1
- data/lib/active_job/serializers/time_object_serializer.rb +13 -0
- data/lib/active_job/serializers/time_serializer.rb +1 -5
- data/lib/active_job/serializers/time_with_zone_serializer.rb +1 -5
- data/lib/active_job/test_helper.rb +79 -80
- metadata +15 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e8ecd60ff8f673ab2711ef5b6b634ce5828160113e8ac5eec732d71bc691660
|
4
|
+
data.tar.gz: 0207aac145fea7328f0afbe4680413712bbf1f1bd7a400d0b19f178ecf21024f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf88c0a034e81a6d1a75fa95b37b790647eac95a4f3bfdef7b93bb0880d80e7e040a2eb9afe735544ed11ffdd7337eb7f5bcdf8fe2f3c38045ed5319b8bf5e02
|
7
|
+
data.tar.gz: 4fbc6a306f542ba1dbb749e1defb085bd52c691b6287c6ef3e10a8bfd527f8e85914c162b5728f47e08271f6367f182195cf30fb6a7c8ba4c2b5af211b4e2b7d
|
data/CHANGELOG.md
CHANGED
@@ -1,203 +1,130 @@
|
|
1
|
-
## Rails 6.0
|
1
|
+
## Rails 6.1.0 (December 09, 2020) ##
|
2
2
|
|
3
|
-
*
|
3
|
+
* Recover nano precision when serializing `Time`, `TimeWithZone` and `DateTime` objects.
|
4
4
|
|
5
|
+
*Alan Tan*
|
5
6
|
|
6
|
-
|
7
|
+
* Deprecate `config.active_job.return_false_on_aborted_enqueue`.
|
7
8
|
|
8
|
-
*
|
9
|
+
*Rafael Mendonça França*
|
9
10
|
|
11
|
+
* Return `false` when enqueuing a job is aborted.
|
10
12
|
|
11
|
-
|
13
|
+
*Rafael Mendonça França*
|
12
14
|
|
13
15
|
* While using `perform_enqueued_jobs` test helper enqueued jobs must be stored for the later check with
|
14
16
|
`assert_enqueued_with`.
|
15
17
|
|
16
18
|
*Dmitry Polushkin*
|
17
19
|
|
18
|
-
*
|
20
|
+
* `ActiveJob::TestCase#perform_enqueued_jobs` without a block removes performed jobs from the queue.
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
## Rails 6.0.2.2 (March 19, 2020) ##
|
24
|
-
|
25
|
-
* No changes.
|
26
|
-
|
27
|
-
|
28
|
-
## Rails 6.0.2.1 (December 18, 2019) ##
|
29
|
-
|
30
|
-
* No changes.
|
31
|
-
|
32
|
-
|
33
|
-
## Rails 6.0.2 (December 13, 2019) ##
|
34
|
-
|
35
|
-
* Allow Sidekiq access to the underlying job class.
|
36
|
-
|
37
|
-
By having access to the Active Job class, Sidekiq can get access to any `sidekiq_options` which
|
38
|
-
have been set on that Active Job type and serialize those options into Redis.
|
39
|
-
|
40
|
-
https://github.com/mperham/sidekiq/blob/master/Changes.md#60
|
41
|
-
|
42
|
-
*Mike Perham*
|
43
|
-
|
44
|
-
|
45
|
-
## Rails 6.0.1 (November 5, 2019) ##
|
46
|
-
|
47
|
-
* No changes.
|
48
|
-
|
49
|
-
|
50
|
-
## Rails 6.0.0 (August 16, 2019) ##
|
51
|
-
|
52
|
-
* `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
|
53
|
-
|
54
|
-
*Vlado Cingel*
|
55
|
-
|
56
|
-
|
57
|
-
## Rails 6.0.0.rc2 (July 22, 2019) ##
|
58
|
-
|
59
|
-
* No changes.
|
60
|
-
|
61
|
-
|
62
|
-
## Rails 6.0.0.rc1 (April 24, 2019) ##
|
63
|
-
|
64
|
-
* Use individual execution counters when calculating retry delay.
|
65
|
-
|
66
|
-
*Patrik Bóna*
|
67
|
-
|
68
|
-
* Make job argument assertions with `Time`, `ActiveSupport::TimeWithZone`, and `DateTime` work by dropping microseconds. Microsecond precision is lost during serialization.
|
69
|
-
|
70
|
-
*Gannon McGibbon*
|
22
|
+
That way the helper can be called multiple times and not perform a job invocation multiple times.
|
71
23
|
|
24
|
+
```ruby
|
25
|
+
def test_jobs
|
26
|
+
HelloJob.perform_later("rafael")
|
27
|
+
perform_enqueued_jobs # only runs with "rafael"
|
28
|
+
HelloJob.perform_later("david")
|
29
|
+
perform_enqueued_jobs # only runs with "david"
|
30
|
+
end
|
31
|
+
```
|
72
32
|
|
73
|
-
|
74
|
-
|
75
|
-
* No changes.
|
76
|
-
|
77
|
-
|
78
|
-
## Rails 6.0.0.beta2 (February 25, 2019) ##
|
79
|
-
|
80
|
-
* No changes.
|
33
|
+
*Étienne Barrié*
|
81
34
|
|
35
|
+
* `ActiveJob::TestCase#perform_enqueued_jobs` will no longer perform retries:
|
82
36
|
|
83
|
-
|
37
|
+
When calling `perform_enqueued_jobs` without a block, the adapter will
|
38
|
+
now perform jobs that are **already** in the queue. Jobs that will end up in
|
39
|
+
the queue afterwards won't be performed.
|
84
40
|
|
85
|
-
|
41
|
+
This change only affects `perform_enqueued_jobs` when no block is given.
|
86
42
|
|
87
|
-
|
88
|
-
`config.active_job.return_false_on_aborted_enqueue`.
|
43
|
+
*Edouard Chin*
|
89
44
|
|
90
|
-
|
45
|
+
* Add queue name support to Que adapter.
|
91
46
|
|
92
|
-
*
|
47
|
+
*Brad Nauta*, *Wojciech Wnętrzak*
|
93
48
|
|
94
|
-
|
95
|
-
shared between all executions of a job.
|
49
|
+
* Don't run `after_enqueue` and `after_perform` callbacks if the callback chain is halted.
|
96
50
|
|
97
|
-
|
51
|
+
class MyJob < ApplicationJob
|
52
|
+
before_enqueue { throw(:abort) }
|
53
|
+
after_enqueue { # won't enter here anymore }
|
54
|
+
end
|
98
55
|
|
99
|
-
|
100
|
-
|
56
|
+
`after_enqueue` and `after_perform` callbacks will no longer run if the callback chain is halted.
|
57
|
+
This behaviour is a breaking change and won't take effect until Rails 6.2.
|
58
|
+
To enable this behaviour in your app right now, you can add in your app's configuration file
|
59
|
+
`config.active_job.skip_after_callbacks_if_terminated = true`.
|
101
60
|
|
102
61
|
*Edouard Chin*
|
103
62
|
|
104
|
-
*
|
63
|
+
* Fix enqueuing and performing incorrect logging message.
|
105
64
|
|
106
|
-
|
65
|
+
Jobs will no longer always log "Enqueued MyJob" or "Performed MyJob" when they actually didn't get enqueued/performed.
|
107
66
|
|
108
|
-
|
109
|
-
|
67
|
+
```ruby
|
68
|
+
class MyJob < ApplicationJob
|
69
|
+
before_enqueue { throw(:abort) }
|
70
|
+
end
|
110
71
|
|
111
|
-
|
72
|
+
MyJob.perform_later # Will no longer log "Enqueued MyJob" since job wasn't even enqueued through adapter.
|
73
|
+
```
|
112
74
|
|
113
|
-
|
114
|
-
|
115
|
-
matches your expectations.
|
75
|
+
A new message will be logged in case a job couldn't be enqueued, either because the callback chain was halted or
|
76
|
+
because an exception happened during enqueuing. (i.e. Redis is down when you try to enqueue your job)
|
116
77
|
|
117
78
|
*Edouard Chin*
|
118
79
|
|
119
|
-
*
|
120
|
-
|
121
|
-
*Ricardo Díaz*
|
122
|
-
|
123
|
-
* Added `enqueue_retry.active_job`, `retry_stopped.active_job`, and `discard.active_job` hooks.
|
124
|
-
|
125
|
-
*steves*
|
80
|
+
* Add an option to disable logging of the job arguments when enqueuing and executing the job.
|
126
81
|
|
127
|
-
|
82
|
+
class SensitiveJob < ApplicationJob
|
83
|
+
self.log_arguments = false
|
128
84
|
|
129
|
-
|
85
|
+
def perform(my_sensitive_argument)
|
86
|
+
end
|
87
|
+
end
|
130
88
|
|
131
|
-
|
132
|
-
|
89
|
+
When dealing with sensitive arguments as password and tokens it is now possible to configure the job
|
90
|
+
to not put the sensitive argument in the logs.
|
133
91
|
|
134
|
-
*
|
92
|
+
*Rafael Mendonça França*
|
135
93
|
|
136
|
-
*
|
94
|
+
* Changes in `queue_name_prefix` of a job no longer affects all other jobs.
|
137
95
|
|
138
|
-
|
96
|
+
Fixes #37084.
|
139
97
|
|
140
|
-
*
|
98
|
+
*Lucas Mansur*
|
141
99
|
|
142
|
-
|
100
|
+
* Allow `Class` and `Module` instances to be serialized.
|
143
101
|
|
144
102
|
*Kevin Deisz*
|
145
103
|
|
146
|
-
*
|
147
|
-
|
148
|
-
Improves timing accuracy over the old after callback by including
|
149
|
-
time spent writing to the adapter's IO implementation.
|
150
|
-
|
151
|
-
*Zach Kemp*
|
152
|
-
|
153
|
-
* Allow call `assert_enqueued_with` with no block.
|
104
|
+
* Log potential matches in `assert_enqueued_with` and `assert_performed_with`.
|
154
105
|
|
155
|
-
|
156
|
-
```
|
157
|
-
def test_assert_enqueued_with
|
158
|
-
MyJob.perform_later(1,2,3)
|
159
|
-
assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low')
|
160
|
-
|
161
|
-
MyJob.set(wait_until: Date.tomorrow.noon).perform_later
|
162
|
-
assert_enqueued_with(job: MyJob, at: Date.tomorrow.noon)
|
163
|
-
end
|
164
|
-
```
|
165
|
-
|
166
|
-
*bogdanvlviv*
|
167
|
-
|
168
|
-
* Allow passing multiple exceptions to `retry_on`, and `discard_on`.
|
169
|
-
|
170
|
-
*George Claghorn*
|
171
|
-
|
172
|
-
* Pass the error instance as the second parameter of block executed by `discard_on`.
|
106
|
+
*Gareth du Plooy*
|
173
107
|
|
174
|
-
|
108
|
+
* Add `at` argument to the `perform_enqueued_jobs` test helper.
|
175
109
|
|
176
|
-
*
|
110
|
+
*John Crepezzi*, *Eileen Uchitelle*
|
177
111
|
|
178
|
-
*
|
179
|
-
|
180
|
-
Reasons are that the Qu gem wasn't compatible since Rails 5.1,
|
181
|
-
gem development was stopped in 2014 and maintainers have
|
182
|
-
confirmed its demise. See issue #32273
|
183
|
-
|
184
|
-
*Alberto Almagro*
|
185
|
-
|
186
|
-
* Add support for timezones to Active Job.
|
187
|
-
|
188
|
-
Record what was the current timezone in effect when the job was
|
189
|
-
enqueued and then restore when the job is executed in same way
|
190
|
-
that the current locale is recorded and restored.
|
112
|
+
* `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
|
191
113
|
|
192
|
-
*
|
114
|
+
*Vlado Cingel*
|
193
115
|
|
194
|
-
*
|
116
|
+
* Add jitter to `ActiveJob::Exceptions.retry_on`.
|
195
117
|
|
196
|
-
|
118
|
+
`ActiveJob::Exceptions.retry_on` now uses a random amount of jitter in order to
|
119
|
+
prevent the [thundering herd effect](https://en.wikipedia.org/wiki/Thundering_herd_problem). Defaults to
|
120
|
+
15% (represented as 0.15) but overridable via the `:jitter` option when using `retry_on`.
|
121
|
+
Jitter is applied when an `Integer`, `ActiveSupport::Duration` or `:exponentially_longer`, is passed to the `wait` argument in `retry_on`.
|
197
122
|
|
198
|
-
|
123
|
+
```ruby
|
124
|
+
retry_on(MyError, wait: :exponentially_longer, jitter: 0.30)
|
125
|
+
```
|
199
126
|
|
200
|
-
*
|
127
|
+
*Anthony Ross*
|
201
128
|
|
202
129
|
|
203
|
-
Please check [
|
130
|
+
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activejob/CHANGELOG.md) for previous changes.
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -95,9 +95,6 @@ their gem, or as a stand-alone gem. For discussion about this see the
|
|
95
95
|
following PRs: [23311](https://github.com/rails/rails/issues/23311#issuecomment-176275718),
|
96
96
|
[21406](https://github.com/rails/rails/pull/21406#issuecomment-138813484), and [#32285](https://github.com/rails/rails/pull/32285).
|
97
97
|
|
98
|
-
## Auxiliary gems
|
99
|
-
|
100
|
-
* [activejob-stats](https://github.com/seuros/activejob-stats)
|
101
98
|
|
102
99
|
## Download and installation
|
103
100
|
|
@@ -111,6 +108,7 @@ Source code can be downloaded as part of the Rails project on GitHub:
|
|
111
108
|
|
112
109
|
* https://github.com/rails/rails/tree/master/activejob
|
113
110
|
|
111
|
+
|
114
112
|
## License
|
115
113
|
|
116
114
|
Active Job is released under the MIT license:
|
data/lib/active_job.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright (c) 2014-
|
4
|
+
# Copyright (c) 2014-2020 David Heinemeier Hansson
|
5
5
|
#
|
6
6
|
# Permission is hereby granted, free of charge, to any person obtaining
|
7
7
|
# a copy of this software and associated documentation files (the
|
data/lib/active_job/base.rb
CHANGED
@@ -8,7 +8,9 @@ require "active_job/enqueuing"
|
|
8
8
|
require "active_job/execution"
|
9
9
|
require "active_job/callbacks"
|
10
10
|
require "active_job/exceptions"
|
11
|
+
require "active_job/log_subscriber"
|
11
12
|
require "active_job/logging"
|
13
|
+
require "active_job/instrumentation"
|
12
14
|
require "active_job/timezones"
|
13
15
|
require "active_job/translation"
|
14
16
|
|
@@ -68,6 +70,7 @@ module ActiveJob #:nodoc:
|
|
68
70
|
include Callbacks
|
69
71
|
include Exceptions
|
70
72
|
include Logging
|
73
|
+
include Instrumentation
|
71
74
|
include Timezones
|
72
75
|
include Translation
|
73
76
|
|
data/lib/active_job/callbacks.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "active_support/callbacks"
|
4
|
+
require "active_support/core_ext/object/with_options"
|
5
|
+
require "active_support/core_ext/module/attribute_accessors"
|
4
6
|
|
5
7
|
module ActiveJob
|
6
8
|
# = Active Job Callbacks
|
@@ -27,16 +29,25 @@ module ActiveJob
|
|
27
29
|
end
|
28
30
|
|
29
31
|
included do
|
30
|
-
|
31
|
-
|
32
|
+
class_attribute :return_false_on_aborted_enqueue, instance_accessor: false, instance_predicate: false, default: false
|
33
|
+
singleton_class.deprecate :return_false_on_aborted_enqueue, :return_false_on_aborted_enqueue=
|
34
|
+
cattr_accessor :skip_after_callbacks_if_terminated, instance_accessor: false, default: false
|
32
35
|
|
33
|
-
|
34
|
-
|
36
|
+
with_options(skip_after_callbacks_if_terminated: skip_after_callbacks_if_terminated) do
|
37
|
+
define_callbacks :perform
|
38
|
+
define_callbacks :enqueue
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
42
|
# These methods will be included into any Active Job object, adding
|
38
43
|
# callbacks for +perform+ and +enqueue+ methods.
|
39
44
|
module ClassMethods
|
45
|
+
def inherited(klass)
|
46
|
+
klass.get_callbacks(:enqueue).config[:skip_after_callbacks_if_terminated] = skip_after_callbacks_if_terminated
|
47
|
+
klass.get_callbacks(:perform).config[:skip_after_callbacks_if_terminated] = skip_after_callbacks_if_terminated
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
40
51
|
# Defines a callback that will get called right before the
|
41
52
|
# job's perform method is executed.
|
42
53
|
#
|
@@ -91,6 +102,19 @@ module ActiveJob
|
|
91
102
|
# end
|
92
103
|
# end
|
93
104
|
#
|
105
|
+
# You can access the return value of the job only if the execution wasn't halted.
|
106
|
+
#
|
107
|
+
# class VideoProcessJob < ActiveJob::Base
|
108
|
+
# around_perform do |job, block|
|
109
|
+
# value = block.call
|
110
|
+
# puts value # => "Hello World!"
|
111
|
+
# end
|
112
|
+
#
|
113
|
+
# def perform
|
114
|
+
# "Hello World!"
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
#
|
94
118
|
def around_perform(*filters, &blk)
|
95
119
|
set_callback(:perform, :around, *filters, &blk)
|
96
120
|
end
|
@@ -154,5 +178,21 @@ module ActiveJob
|
|
154
178
|
set_callback(:enqueue, :around, *filters, &blk)
|
155
179
|
end
|
156
180
|
end
|
181
|
+
|
182
|
+
private
|
183
|
+
def halted_callback_hook(_filter, name) # :nodoc:
|
184
|
+
return super unless %i(enqueue perform).include?(name.to_sym)
|
185
|
+
callbacks = public_send("_#{name}_callbacks")
|
186
|
+
|
187
|
+
if !self.class.skip_after_callbacks_if_terminated && callbacks.any? { |c| c.kind == :after }
|
188
|
+
ActiveSupport::Deprecation.warn(<<~EOM)
|
189
|
+
In Rails 6.2, `after_enqueue`/`after_perform` callbacks no longer run if `before_enqueue`/`before_perform` respectively halts with `throw :abort`.
|
190
|
+
To enable this behavior, uncomment the `config.active_job.skip_after_callbacks_if_terminated` config
|
191
|
+
in the new 6.1 framework defaults initializer.
|
192
|
+
EOM
|
193
|
+
end
|
194
|
+
|
195
|
+
super
|
196
|
+
end
|
157
197
|
end
|
158
198
|
end
|
data/lib/active_job/core.rb
CHANGED
@@ -85,6 +85,7 @@ module ActiveJob
|
|
85
85
|
@priority = self.class.priority
|
86
86
|
@executions = 0
|
87
87
|
@exception_executions = {}
|
88
|
+
@timezone = Time.zone&.name
|
88
89
|
end
|
89
90
|
ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
|
90
91
|
|
@@ -101,7 +102,7 @@ module ActiveJob
|
|
101
102
|
"executions" => executions,
|
102
103
|
"exception_executions" => exception_executions,
|
103
104
|
"locale" => I18n.locale.to_s,
|
104
|
-
"timezone" =>
|
105
|
+
"timezone" => timezone,
|
105
106
|
"enqueued_at" => Time.now.utc.iso8601
|
106
107
|
}
|
107
108
|
end
|
@@ -141,7 +142,7 @@ module ActiveJob
|
|
141
142
|
self.executions = job_data["executions"]
|
142
143
|
self.exception_executions = job_data["exception_executions"]
|
143
144
|
self.locale = job_data["locale"] || I18n.locale.to_s
|
144
|
-
self.timezone = job_data["timezone"] || Time.zone
|
145
|
+
self.timezone = job_data["timezone"] || Time.zone&.name
|
145
146
|
self.enqueued_at = job_data["enqueued_at"]
|
146
147
|
end
|
147
148
|
|
data/lib/active_job/enqueuing.rb
CHANGED
@@ -54,9 +54,9 @@ module ActiveJob
|
|
54
54
|
|
55
55
|
run_callbacks :enqueue do
|
56
56
|
if scheduled_at
|
57
|
-
|
57
|
+
queue_adapter.enqueue_at self, scheduled_at
|
58
58
|
else
|
59
|
-
|
59
|
+
queue_adapter.enqueue self
|
60
60
|
end
|
61
61
|
|
62
62
|
successfully_enqueued = true
|
@@ -65,17 +65,7 @@ module ActiveJob
|
|
65
65
|
if successfully_enqueued
|
66
66
|
self
|
67
67
|
else
|
68
|
-
|
69
|
-
false
|
70
|
-
else
|
71
|
-
ActiveSupport::Deprecation.warn(
|
72
|
-
"Rails 6.1 will return false when the enqueuing is aborted. Make sure your code doesn't depend on it" \
|
73
|
-
" returning the instance of the job and set `config.active_job.return_false_on_aborted_enqueue = true`" \
|
74
|
-
" to remove the deprecations."
|
75
|
-
)
|
76
|
-
|
77
|
-
self
|
78
|
-
end
|
68
|
+
false
|
79
69
|
end
|
80
70
|
end
|
81
71
|
end
|