good_job 2.15.2 → 2.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +35 -0
- data/README.md +30 -15
- data/{engine/app → app}/assets/good_job/modules/application.js +0 -0
- data/{engine/app → app}/assets/good_job/modules/charts.js +0 -0
- data/{engine/app → app}/assets/good_job/modules/checkbox_toggle.js +0 -0
- data/{engine/app → app}/assets/good_job/modules/document_ready.js +0 -0
- data/{engine/app → app}/assets/good_job/modules/live_poll.js +0 -0
- data/{engine/app → app}/assets/good_job/modules/toasts.js +0 -0
- data/{engine/app → app}/assets/good_job/scripts.js +0 -0
- data/{engine/app → app}/assets/good_job/style.css +0 -0
- data/{engine/app → app}/assets/good_job/vendor/bootstrap/bootstrap.bundle.min.js +0 -0
- data/{engine/app → app}/assets/good_job/vendor/bootstrap/bootstrap.min.css +0 -0
- data/{engine/app → app}/assets/good_job/vendor/chartjs/chart.min.js +0 -0
- data/{engine/app → app}/assets/good_job/vendor/es_module_shims.js +0 -0
- data/{engine/app → app}/assets/good_job/vendor/rails_ujs.js +0 -0
- data/{engine/app → app}/charts/good_job/scheduled_by_queue_chart.rb +0 -0
- data/{engine/app → app}/controllers/good_job/application_controller.rb +0 -0
- data/{engine/app → app}/controllers/good_job/assets_controller.rb +0 -0
- data/{engine/app → app}/controllers/good_job/cron_entries_controller.rb +0 -0
- data/{engine/app → app}/controllers/good_job/jobs_controller.rb +0 -0
- data/{engine/app → app}/controllers/good_job/processes_controller.rb +0 -0
- data/{engine/app → app}/filters/good_job/base_filter.rb +0 -0
- data/{engine/app → app}/filters/good_job/jobs_filter.rb +0 -0
- data/{engine/app → app}/helpers/good_job/application_helper.rb +0 -0
- data/{lib → app/models}/good_job/active_job_job.rb +2 -2
- data/{lib → app/models}/good_job/execution.rb +0 -0
- data/{lib → app/models}/good_job/process.rb +0 -0
- data/{engine/app → app}/views/good_job/cron_entries/index.html.erb +0 -0
- data/{engine/app → app}/views/good_job/cron_entries/show.html.erb +0 -0
- data/{engine/app → app}/views/good_job/jobs/_executions.erb +0 -0
- data/{engine/app → app}/views/good_job/jobs/_table.erb +0 -0
- data/{engine/app → app}/views/good_job/jobs/index.html.erb +0 -0
- data/{engine/app → app}/views/good_job/jobs/show.html.erb +0 -0
- data/{engine/app → app}/views/good_job/processes/index.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/_alert.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/_chart.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/_filter.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/_footer.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/_navbar.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_arrow_clockwise.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_check.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_clock.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_dash_circle.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_exclamation.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_play.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_skip_forward.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_stop.html.erb +0 -0
- data/{engine/app → app}/views/good_job/shared/icons/_trash.html.erb +0 -0
- data/{engine/app → app}/views/layouts/good_job/application.html.erb +0 -0
- data/{engine/config → config}/locales/en.yml +0 -0
- data/{engine/config → config}/locales/es.yml +0 -0
- data/{engine/config → config}/locales/nl.yml +0 -0
- data/{engine/config → config}/locales/ru.yml +0 -0
- data/{engine/config → config}/routes.rb +0 -0
- data/lib/good_job/adapter.rb +33 -4
- data/lib/good_job/configuration.rb +4 -0
- data/lib/good_job/{railtie.rb → engine.rb} +3 -1
- data/lib/good_job/version.rb +1 -1
- data/lib/good_job.rb +17 -5
- metadata +56 -58
- data/engine/lib/good_job/engine.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92c29f2bed6e36f449e880b5433c089351c63d1365cdc094b774122202407fb3
|
4
|
+
data.tar.gz: 4125a6cfb9e3c0d3de88bd8cdfb64acb450f8c6072fc2aa6a0907f9b51083add
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd6b4fbce879de227852b9399bbb65739933b50732dfc5be5a3563162c55375d1d366d4796bf163c4d12683a7f03668ef7a80d73e229343debe622c7e7ccd2b1
|
7
|
+
data.tar.gz: 5f4fac41e04a0844b93cc482e24b910e599ccabf411ac6841e7519cb6d573a6d7bb82070f6a35ffc40a1937256f910e9e6995cc5a9090e779c9b2eac33a8d901
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,40 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v2.17.0](https://github.com/bensheldon/good_job/tree/v2.17.0) (2022-06-23)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.16.1...v2.17.0)
|
6
|
+
|
7
|
+
**Merged pull requests:**
|
8
|
+
|
9
|
+
- Remove nonexistant `engine/lib` from $LOAD\_PATH [\#629](https://github.com/bensheldon/good_job/pull/629) ([bensheldon](https://github.com/bensheldon))
|
10
|
+
- Mention in README that dashboard can't see completed jobs unless they are preserved [\#627](https://github.com/bensheldon/good_job/pull/627) ([jrochkind](https://github.com/jrochkind))
|
11
|
+
- Clarify README on default in development [\#623](https://github.com/bensheldon/good_job/pull/623) ([jrochkind](https://github.com/jrochkind))
|
12
|
+
- Convert GoodJob into a single mountable engine \(instead of a plugin plus optional engine\) [\#554](https://github.com/bensheldon/good_job/pull/554) ([bensheldon](https://github.com/bensheldon))
|
13
|
+
|
14
|
+
## [v2.16.1](https://github.com/bensheldon/good_job/tree/v2.16.1) (2022-06-18)
|
15
|
+
|
16
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.16.0...v2.16.1)
|
17
|
+
|
18
|
+
**Fixed bugs:**
|
19
|
+
|
20
|
+
- Fix `:inline` mode with future behavior to run unscheduled jobs immediately [\#620](https://github.com/bensheldon/good_job/pull/620) ([bensheldon](https://github.com/bensheldon))
|
21
|
+
|
22
|
+
**Merged pull requests:**
|
23
|
+
|
24
|
+
- Version check `Zeitwerk::Loader.new(warn_on_extra_files: false)` flag [\#619](https://github.com/bensheldon/good_job/pull/619) ([bensheldon](https://github.com/bensheldon))
|
25
|
+
|
26
|
+
## [v2.16.0](https://github.com/bensheldon/good_job/tree/v2.16.0) (2022-06-17)
|
27
|
+
|
28
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.15.2...v2.16.0)
|
29
|
+
|
30
|
+
**Implemented enhancements:**
|
31
|
+
|
32
|
+
- Allow inline executor to respect scheduled jobs; deprecate old behavior. Add `GoodJob.perform_inline` [\#615](https://github.com/bensheldon/good_job/pull/615) ([bensheldon](https://github.com/bensheldon))
|
33
|
+
|
34
|
+
**Closed issues:**
|
35
|
+
|
36
|
+
- Upgrading zeitwerk to 2.6.0 causes a warning related to good\_job [\#616](https://github.com/bensheldon/good_job/issues/616)
|
37
|
+
|
3
38
|
## [v2.15.2](https://github.com/bensheldon/good_job/tree/v2.15.2) (2022-06-17)
|
4
39
|
|
5
40
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.15.1...v2.15.2)
|
data/README.md
CHANGED
@@ -59,6 +59,7 @@ For more of the story of GoodJob, read the [introductory blog post](https://isla
|
|
59
59
|
- [Execute jobs async / in-process](#execute-jobs-async--in-process)
|
60
60
|
- [Migrate to GoodJob from a different ActiveJob backend](#migrate-to-goodjob-from-a-different-activejob-backend)
|
61
61
|
- [Monitor and preserve worked jobs](#monitor-and-preserve-worked-jobs)
|
62
|
+
- [Write tests](#write-tests)
|
62
63
|
- [PgBouncer compatibility](#pgbouncer-compatibility)
|
63
64
|
- [CLI HTTP health check probes](#cli-http-health-check-probes)
|
64
65
|
- [Contribute](#contribute)
|
@@ -115,7 +116,7 @@ For more of the story of GoodJob, read the [introductory blog post](https://isla
|
|
115
116
|
YourJob.set(queue: :some_queue, wait: 5.minutes, priority: 10).perform_later
|
116
117
|
```
|
117
118
|
|
118
|
-
1. In development, GoodJob executes jobs immediately. In production, GoodJob provides different options:
|
119
|
+
1. In development, GoodJob executes jobs immediately in a separate thread (async mode). In production, GoodJob provides different options:
|
119
120
|
|
120
121
|
- By default, GoodJob separates job enqueuing from job execution so that jobs can be scaled independently of the web server. Use the GoodJob command-line tool to execute jobs:
|
121
122
|
|
@@ -276,6 +277,7 @@ Available configuration options are:
|
|
276
277
|
- `cleanup_preserved_jobs_before_seconds_ago` (integer) number of seconds to preserve jobs when using the `$ good_job cleanup_preserved_jobs` CLI command or calling `GoodJob.cleanup_preserved_jobs`. Defaults to `86400` (1 day). Can also be set with the environment variable `GOOD_JOB_CLEANUP_PRESERVED_JOBS_BEFORE_SECONDS_AGO`. _This configuration is only used when {GoodJob.preserve_job_records} is `true`._
|
277
278
|
- `cleanup_interval_jobs` (integer) Number of jobs a Scheduler will execute before cleaning up preserved jobs. Defaults to `nil`. Can also be set with the environment variable `GOOD_JOB_CLEANUP_INTERVAL_JOBS`.
|
278
279
|
- `cleanup_interval_seconds` (integer) Number of seconds a Scheduler will wait before cleaning up preserved jobs. Defaults to `nil`. Can also be set with the environment variable `GOOD_JOB_CLEANUP_INTERVAL_SECONDS`.
|
280
|
+
- `inline_execution_respects_schedule` (boolean) Opt-in to future behavior of inline execution respecting scheduled jobs. Defaults to `false`.
|
279
281
|
- `logger` ([Rails Logger](https://api.rubyonrails.org/classes/ActiveSupport/Logger.html)) lets you set a custom logger for GoodJob. It should be an instance of a Rails `Logger` (Default: `Rails.logger`).
|
280
282
|
- `preserve_job_records` (boolean) keeps job records in your database even after jobs are completed. (Default: `false`)
|
281
283
|
- `retry_on_unhandled_error` (boolean) causes jobs to be re-queued and retried if they raise an instance of `StandardError`. Be advised this may lead to jobs being repeated infinitely ([see below for more on retries](#retries)). Instances of `Exception`, like SIGINT, will *always* be retried, regardless of this attribute’s value. (Default: `true`)
|
@@ -330,19 +332,6 @@ _🚧 GoodJob's dashboard is a work in progress. Please contribute ideas and cod
|
|
330
332
|
|
331
333
|
GoodJob includes a Dashboard as a mountable `Rails::Engine`.
|
332
334
|
|
333
|
-
1. Explicitly require the Engine code at the top of your `config/application.rb` file, immediately after Rails is required and before Bundler requires the Rails' groups. This is necessary because the mountable engine is an optional feature of GoodJob.
|
334
|
-
|
335
|
-
```ruby
|
336
|
-
# config/application.rb
|
337
|
-
require_relative 'boot'
|
338
|
-
|
339
|
-
require 'rails/all'
|
340
|
-
require 'good_job/engine' # <= Add this line
|
341
|
-
# ...
|
342
|
-
```
|
343
|
-
|
344
|
-
Note: If you find the dashboard fails to reload due to a routing error and uninitialized constant `GoodJob::ExecutionsController`, this is likely because you are not requiring the engine early enough.
|
345
|
-
|
346
335
|
1. Mount the engine in your `config/routes.rb` file. The following will mount it at `http://example.com/good_job`.
|
347
336
|
|
348
337
|
```ruby
|
@@ -351,7 +340,7 @@ GoodJob includes a Dashboard as a mountable `Rails::Engine`.
|
|
351
340
|
mount GoodJob::Engine => 'good_job'
|
352
341
|
```
|
353
342
|
|
354
|
-
|
343
|
+
1. Configure authentication. Because jobs can potentially contain sensitive information, you should authorize access. For example, using Devise's `authenticate` helper, that might look like:
|
355
344
|
|
356
345
|
```ruby
|
357
346
|
# config/routes.rb
|
@@ -371,6 +360,15 @@ GoodJob includes a Dashboard as a mountable `Rails::Engine`.
|
|
371
360
|
end
|
372
361
|
```
|
373
362
|
|
363
|
+
1. If you want to see finished (successful) and discarded (failed) jobs on the dashboard, you will have to configure job records to be preserved:
|
364
|
+
|
365
|
+
```ruby
|
366
|
+
# eg in config/initializers/good_job.rb
|
367
|
+
GoodJob.preserve_job_records = true
|
368
|
+
```
|
369
|
+
|
370
|
+
See more at [Monitor and preserve worked jobs](#monitor-and-preserve-worked-jobs)
|
371
|
+
|
374
372
|
#### API-only Rails applications
|
375
373
|
|
376
374
|
API-only Rails applications may not have all of the required Rack middleware for the GoodJob Dashboard to function. To re-add the middlware:
|
@@ -878,6 +876,23 @@ It is also necessary to destroy these preserved jobs from the database after a c
|
|
878
876
|
bundle exec good_job cleanup_preserved_jobs --before-seconds-ago=86400
|
879
877
|
```
|
880
878
|
|
879
|
+
### Write tests
|
880
|
+
|
881
|
+
By default, GoodJob uses its inline adapter in the test environment; the inline adapter is designed for the test environment. When enquing a job with GoodJob's inline adapter, the job will be executed immediately on the current thread; unhandled exceptions will be raised.
|
882
|
+
|
883
|
+
In GoodJob 2.0, the inline adapter will execute future scheduled jobs immediately. In the next major release, GoodJob 3.0, the inline adapter will not execute future scheduled jobs and instead enqueue them in the database.
|
884
|
+
|
885
|
+
To opt into this behavior immediately set: `config.good_job.inline_execution_respects_schedule = true`
|
886
|
+
|
887
|
+
To perform jobs inline at any time, use `GoodJob.perform_inline`. For example, using time helpers within an integration test:
|
888
|
+
|
889
|
+
```ruby
|
890
|
+
MyJob.set(wait: 10.minutes).perform_later
|
891
|
+
travel_to(15.minutes.from_now) { GoodJob.perform_inline }
|
892
|
+
```
|
893
|
+
|
894
|
+
_Note: Rails `travel`/`travel_to` time helpers do not have millisecond precision, so you must leave at least 1 second between the schedule and time traveling for the job to be executed. This [behavior may change in Rails 7.1](https://github.com/rails/rails/pull/44088)._
|
895
|
+
|
881
896
|
### PgBouncer compatibility
|
882
897
|
|
883
898
|
GoodJob is not compatible with PgBouncer in _transaction_ mode, but is compatible with PgBouncer's _connection_ mode. GoodJob uses connection-based advisory locks and LISTEN/NOTIFY, both of which require full database connections.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -16,7 +16,7 @@ module GoodJob
|
|
16
16
|
DiscardJobError = Class.new(StandardError)
|
17
17
|
|
18
18
|
class << self
|
19
|
-
delegate :table_name, to: Execution
|
19
|
+
delegate :table_name, to: GoodJob::Execution
|
20
20
|
|
21
21
|
def table_name=(_value)
|
22
22
|
raise NotImplementedError, 'Assign GoodJob::Execution.table_name directly'
|
@@ -26,7 +26,7 @@ module GoodJob
|
|
26
26
|
self.primary_key = 'active_job_id'
|
27
27
|
self.advisory_lockable_column = 'active_job_id'
|
28
28
|
|
29
|
-
has_many :executions, -> { order(created_at: :asc) }, class_name: 'GoodJob::Execution', foreign_key: 'active_job_id', inverse_of: :job
|
29
|
+
has_many :executions, -> { order(created_at: :asc) }, class_name: 'GoodJob::Execution', foreign_key: 'active_job_id', inverse_of: :job # rubocop:disable Rails/HasManyOrHasOneDependent
|
30
30
|
|
31
31
|
# Only the most-recent unretried execution represents a "Job"
|
32
32
|
default_scope { where(retried_good_job_id: nil) }
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/good_job/adapter.rb
CHANGED
@@ -62,19 +62,48 @@ module GoodJob
|
|
62
62
|
# @param timestamp [Integer, nil] the epoch time to perform the job
|
63
63
|
# @return [GoodJob::Execution]
|
64
64
|
def enqueue_at(active_job, timestamp)
|
65
|
+
scheduled_at = timestamp ? Time.zone.at(timestamp) : nil
|
66
|
+
|
67
|
+
if execute_inline?
|
68
|
+
future_scheduled = scheduled_at && scheduled_at > Time.current
|
69
|
+
will_execute_inline = !future_scheduled || (future_scheduled && !@configuration.inline_execution_respects_schedule?)
|
70
|
+
end
|
71
|
+
|
65
72
|
execution = GoodJob::Execution.enqueue(
|
66
73
|
active_job,
|
67
|
-
scheduled_at:
|
68
|
-
create_with_advisory_lock:
|
74
|
+
scheduled_at: scheduled_at,
|
75
|
+
create_with_advisory_lock: will_execute_inline
|
69
76
|
)
|
70
77
|
|
71
|
-
if
|
78
|
+
if will_execute_inline
|
79
|
+
if future_scheduled && !@configuration.inline_execution_respects_schedule?
|
80
|
+
ActiveSupport::Deprecation.warn(<<~DEPRECATION)
|
81
|
+
In the next major release, GoodJob will not *inline* execute
|
82
|
+
future-scheduled jobs.
|
83
|
+
|
84
|
+
To opt into this behavior immediately set:
|
85
|
+
`config.good_job.inline_execution_respects_schedule = true`
|
86
|
+
|
87
|
+
To perform jobs inline at any time, use `GoodJob.perform_inline`.
|
88
|
+
|
89
|
+
For example, using time helpers within an integration test:
|
90
|
+
|
91
|
+
```
|
92
|
+
MyJob.set(wait: 10.minutes).perform_later
|
93
|
+
travel_to(15.minutes.from_now) { GoodJob.perform_inline }
|
94
|
+
```
|
95
|
+
|
96
|
+
Note: Rails `travel`/`travel_to` time helpers do not have millisecond
|
97
|
+
precision, so you must leave at least 1 second between the schedule
|
98
|
+
and time traveling for the job to be executed.
|
99
|
+
DEPRECATION
|
100
|
+
end
|
101
|
+
|
72
102
|
begin
|
73
103
|
result = execution.perform
|
74
104
|
ensure
|
75
105
|
execution.advisory_unlock
|
76
106
|
end
|
77
|
-
|
78
107
|
raise result.unhandled_error if result.unhandled_error
|
79
108
|
else
|
80
109
|
job_state = { queue_name: execution.queue_name }
|
@@ -119,6 +119,10 @@ module GoodJob
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
+
def inline_execution_respects_schedule?
|
123
|
+
!!rails_config[:inline_execution_respects_schedule]
|
124
|
+
end
|
125
|
+
|
122
126
|
# The maximum number of future-scheduled jobs to store in memory.
|
123
127
|
# Storing future-scheduled jobs in memory reduces execution latency
|
124
128
|
# at the cost of increased memory usage. 10,000 stored jobs = ~20MB.
|
data/lib/good_job/version.rb
CHANGED
data/lib/good_job.rb
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "rails"
|
3
2
|
require "active_job"
|
4
3
|
require "active_job/queue_adapters"
|
5
4
|
|
6
5
|
require "zeitwerk"
|
7
|
-
Zeitwerk::
|
6
|
+
zeitwerk_options = Gem::Version.new(Zeitwerk::VERSION) >= Gem::Version.new("2.6.0") ? { warn_on_extra_files: false } : {}
|
7
|
+
Zeitwerk::Loader.for_gem(**zeitwerk_options).tap do |loader|
|
8
8
|
loader.inflector.inflect({
|
9
9
|
"cli" => "CLI",
|
10
10
|
})
|
11
11
|
loader.ignore("#{__dir__}/generators")
|
12
|
-
loader.ignore("#{__dir__}/active_job")
|
13
|
-
loader.push_dir("#{__dir__}/active_job/queue_adapters", namespace: ActiveJob::QueueAdapters)
|
14
12
|
loader.setup
|
15
13
|
end
|
16
14
|
|
17
|
-
require "good_job/
|
15
|
+
require "good_job/engine"
|
18
16
|
|
19
17
|
# GoodJob is a multithreaded, Postgres-based, ActiveJob backend for Ruby on Rails.
|
20
18
|
#
|
@@ -153,6 +151,20 @@ module GoodJob
|
|
153
151
|
end
|
154
152
|
end
|
155
153
|
|
154
|
+
# Perform all queued jobs in the current thread.
|
155
|
+
# This is primarily intended for usage in a test environment.
|
156
|
+
# Unhandled job errors will be raised.
|
157
|
+
# @param queue_string [String] Queues to execute jobs from
|
158
|
+
# @return [void]
|
159
|
+
def self.perform_inline(queue_string = "*")
|
160
|
+
job_performer = JobPerformer.new(queue_string)
|
161
|
+
loop do
|
162
|
+
result = job_performer.next
|
163
|
+
break unless result
|
164
|
+
raise result.unhandled_error if result.unhandled_error
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
156
168
|
def self._executables
|
157
169
|
[].concat(
|
158
170
|
CronManager.instances,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: good_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Sheldon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|
@@ -360,56 +360,58 @@ files:
|
|
360
360
|
- CHANGELOG.md
|
361
361
|
- LICENSE.txt
|
362
362
|
- README.md
|
363
|
-
-
|
364
|
-
-
|
365
|
-
-
|
366
|
-
-
|
367
|
-
-
|
368
|
-
-
|
369
|
-
-
|
370
|
-
-
|
371
|
-
-
|
372
|
-
-
|
373
|
-
-
|
374
|
-
-
|
375
|
-
-
|
376
|
-
-
|
377
|
-
-
|
378
|
-
-
|
379
|
-
-
|
380
|
-
-
|
381
|
-
-
|
382
|
-
-
|
383
|
-
-
|
384
|
-
-
|
385
|
-
-
|
386
|
-
-
|
387
|
-
-
|
388
|
-
-
|
389
|
-
-
|
390
|
-
-
|
391
|
-
-
|
392
|
-
-
|
393
|
-
-
|
394
|
-
-
|
395
|
-
-
|
396
|
-
-
|
397
|
-
-
|
398
|
-
-
|
399
|
-
-
|
400
|
-
-
|
401
|
-
-
|
402
|
-
-
|
403
|
-
-
|
404
|
-
-
|
405
|
-
-
|
406
|
-
-
|
407
|
-
-
|
408
|
-
-
|
409
|
-
-
|
410
|
-
-
|
411
|
-
-
|
412
|
-
-
|
363
|
+
- app/assets/good_job/modules/application.js
|
364
|
+
- app/assets/good_job/modules/charts.js
|
365
|
+
- app/assets/good_job/modules/checkbox_toggle.js
|
366
|
+
- app/assets/good_job/modules/document_ready.js
|
367
|
+
- app/assets/good_job/modules/live_poll.js
|
368
|
+
- app/assets/good_job/modules/toasts.js
|
369
|
+
- app/assets/good_job/scripts.js
|
370
|
+
- app/assets/good_job/style.css
|
371
|
+
- app/assets/good_job/vendor/bootstrap/bootstrap.bundle.min.js
|
372
|
+
- app/assets/good_job/vendor/bootstrap/bootstrap.min.css
|
373
|
+
- app/assets/good_job/vendor/chartjs/chart.min.js
|
374
|
+
- app/assets/good_job/vendor/es_module_shims.js
|
375
|
+
- app/assets/good_job/vendor/rails_ujs.js
|
376
|
+
- app/charts/good_job/scheduled_by_queue_chart.rb
|
377
|
+
- app/controllers/good_job/application_controller.rb
|
378
|
+
- app/controllers/good_job/assets_controller.rb
|
379
|
+
- app/controllers/good_job/cron_entries_controller.rb
|
380
|
+
- app/controllers/good_job/jobs_controller.rb
|
381
|
+
- app/controllers/good_job/processes_controller.rb
|
382
|
+
- app/filters/good_job/base_filter.rb
|
383
|
+
- app/filters/good_job/jobs_filter.rb
|
384
|
+
- app/helpers/good_job/application_helper.rb
|
385
|
+
- app/models/good_job/active_job_job.rb
|
386
|
+
- app/models/good_job/execution.rb
|
387
|
+
- app/models/good_job/process.rb
|
388
|
+
- app/views/good_job/cron_entries/index.html.erb
|
389
|
+
- app/views/good_job/cron_entries/show.html.erb
|
390
|
+
- app/views/good_job/jobs/_executions.erb
|
391
|
+
- app/views/good_job/jobs/_table.erb
|
392
|
+
- app/views/good_job/jobs/index.html.erb
|
393
|
+
- app/views/good_job/jobs/show.html.erb
|
394
|
+
- app/views/good_job/processes/index.html.erb
|
395
|
+
- app/views/good_job/shared/_alert.erb
|
396
|
+
- app/views/good_job/shared/_chart.erb
|
397
|
+
- app/views/good_job/shared/_filter.erb
|
398
|
+
- app/views/good_job/shared/_footer.erb
|
399
|
+
- app/views/good_job/shared/_navbar.erb
|
400
|
+
- app/views/good_job/shared/icons/_arrow_clockwise.html.erb
|
401
|
+
- app/views/good_job/shared/icons/_check.html.erb
|
402
|
+
- app/views/good_job/shared/icons/_clock.html.erb
|
403
|
+
- app/views/good_job/shared/icons/_dash_circle.html.erb
|
404
|
+
- app/views/good_job/shared/icons/_exclamation.html.erb
|
405
|
+
- app/views/good_job/shared/icons/_play.html.erb
|
406
|
+
- app/views/good_job/shared/icons/_skip_forward.html.erb
|
407
|
+
- app/views/good_job/shared/icons/_stop.html.erb
|
408
|
+
- app/views/good_job/shared/icons/_trash.html.erb
|
409
|
+
- app/views/layouts/good_job/application.html.erb
|
410
|
+
- config/locales/en.yml
|
411
|
+
- config/locales/es.yml
|
412
|
+
- config/locales/nl.yml
|
413
|
+
- config/locales/ru.yml
|
414
|
+
- config/routes.rb
|
413
415
|
- exe/good_job
|
414
416
|
- lib/active_job/queue_adapters/good_job_adapter.rb
|
415
417
|
- lib/generators/good_job/install_generator.rb
|
@@ -423,7 +425,6 @@ files:
|
|
423
425
|
- lib/good_job.rb
|
424
426
|
- lib/good_job/active_job_extensions.rb
|
425
427
|
- lib/good_job/active_job_extensions/concurrency.rb
|
426
|
-
- lib/good_job/active_job_job.rb
|
427
428
|
- lib/good_job/adapter.rb
|
428
429
|
- lib/good_job/assignable_connection.rb
|
429
430
|
- lib/good_job/base_record.rb
|
@@ -435,7 +436,7 @@ files:
|
|
435
436
|
- lib/good_job/current_thread.rb
|
436
437
|
- lib/good_job/daemon.rb
|
437
438
|
- lib/good_job/dependencies.rb
|
438
|
-
- lib/good_job/
|
439
|
+
- lib/good_job/engine.rb
|
439
440
|
- lib/good_job/execution_result.rb
|
440
441
|
- lib/good_job/filterable.rb
|
441
442
|
- lib/good_job/job.rb
|
@@ -447,8 +448,6 @@ files:
|
|
447
448
|
- lib/good_job/notifier/process_registration.rb
|
448
449
|
- lib/good_job/poller.rb
|
449
450
|
- lib/good_job/probe_server.rb
|
450
|
-
- lib/good_job/process.rb
|
451
|
-
- lib/good_job/railtie.rb
|
452
451
|
- lib/good_job/scheduler.rb
|
453
452
|
- lib/good_job/version.rb
|
454
453
|
homepage: https://github.com/bensheldon/good_job
|
@@ -472,7 +471,6 @@ rdoc_options:
|
|
472
471
|
- "--quiet"
|
473
472
|
require_paths:
|
474
473
|
- lib
|
475
|
-
- engine/lib
|
476
474
|
required_ruby_version: !ruby/object:Gem::Requirement
|
477
475
|
requirements:
|
478
476
|
- - ">="
|
@@ -484,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
484
482
|
- !ruby/object:Gem::Version
|
485
483
|
version: '0'
|
486
484
|
requirements: []
|
487
|
-
rubygems_version: 3.
|
485
|
+
rubygems_version: 3.3.16
|
488
486
|
signing_key:
|
489
487
|
specification_version: 4
|
490
488
|
summary: A multithreaded, Postgres-based ActiveJob backend for Ruby on Rails
|