good_job 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -4
- data/README.md +21 -6
- data/lib/generators/good_job/install_generator.rb +6 -6
- data/lib/generators/good_job/update_generator.rb +4 -6
- data/lib/good_job/adapter.rb +2 -2
- data/lib/good_job/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11a59540e5e10acc24b9010cb14dc8cbce2f43e8c2f1fe886b6fcf0895a978f2
|
4
|
+
data.tar.gz: 6fea5677587740d390f6eaa3dc903cee7c26a8576f14dd91f85f8886637d634b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '087af5fa1eaf81eff5078b5e3303e202aa73ea022d7018d60f01c6abb5a808a9442278e87490f846475c626bb5b5dd320537d68c16697ca54e9f30147f5b9225'
|
7
|
+
data.tar.gz: d19960b918937484e0f37eb0456fc3352dc2f4394fab4b0477bde7dedab789f2ce63c48b4971e38d2ff3a5d8725f1761afd425426ad384766f34cf549c35009e
|
data/CHANGELOG.md
CHANGED
@@ -1,19 +1,41 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v2.0.2](https://github.com/bensheldon/good_job/tree/v2.0.2) (2021-08-27)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v1.99.1...v2.0.2)
|
6
|
+
|
7
|
+
**Closed issues:**
|
8
|
+
|
9
|
+
- Migrations generator assumes migrations are in db/migrate [\#352](https://github.com/bensheldon/good_job/issues/352)
|
10
|
+
|
11
|
+
**Merged pull requests:**
|
12
|
+
|
13
|
+
- v2.0: Generators support multiple databases: `--database` option, `migrations_paths`, custom `GoodJob.active_record_parent_class` [\#354](https://github.com/bensheldon/good_job/pull/354) ([bensheldon](https://github.com/bensheldon))
|
14
|
+
- README style/typo fixes: "web server" and possessive "Rails'" [\#350](https://github.com/bensheldon/good_job/pull/350) ([aried3r](https://github.com/aried3r))
|
15
|
+
- Add examples of setting config.good\_job.queues [\#349](https://github.com/bensheldon/good_job/pull/349) ([zachmargolis](https://github.com/zachmargolis))
|
16
|
+
|
17
|
+
## [v1.99.1](https://github.com/bensheldon/good_job/tree/v1.99.1) (2021-08-27)
|
18
|
+
|
19
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.0.1...v1.99.1)
|
20
|
+
|
21
|
+
**Closed issues:**
|
22
|
+
|
23
|
+
- Does Good job support delay method? [\#344](https://github.com/bensheldon/good_job/issues/344)
|
24
|
+
|
3
25
|
## [v2.0.1](https://github.com/bensheldon/good_job/tree/v2.0.1) (2021-08-24)
|
4
26
|
|
5
27
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.0.0...v2.0.1)
|
6
28
|
|
29
|
+
**Implemented enhancements:**
|
30
|
+
|
31
|
+
- Suppress backtrace of ConcurrencyExceededError [\#348](https://github.com/bensheldon/good_job/pull/348) ([reczy](https://github.com/reczy))
|
32
|
+
|
7
33
|
**Closed issues:**
|
8
34
|
|
9
35
|
- Is there any value in seeing a backtrace for ConcurrencyExceededError? [\#347](https://github.com/bensheldon/good_job/issues/347)
|
10
36
|
- Release GoodJob 2.0 [\#307](https://github.com/bensheldon/good_job/issues/307)
|
11
37
|
- Unhandled ActiveJob errors should trigger GoodJob.on\_thread\_error [\#247](https://github.com/bensheldon/good_job/issues/247)
|
12
38
|
|
13
|
-
**Merged pull requests:**
|
14
|
-
|
15
|
-
- Suppress backtrace of ConcurrencyExceededError [\#348](https://github.com/bensheldon/good_job/pull/348) ([reczy](https://github.com/reczy))
|
16
|
-
|
17
39
|
## [v2.0.0](https://github.com/bensheldon/good_job/tree/v2.0.0) (2021-08-24)
|
18
40
|
|
19
41
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v1.99.0...v2.0.0)
|
data/README.md
CHANGED
@@ -86,6 +86,13 @@ For more of the story of GoodJob, read the [introductory blog post](https://isla
|
|
86
86
|
$ bin/rails db:migrate
|
87
87
|
```
|
88
88
|
|
89
|
+
Optional: If using Rails' multiple databases with the `migrations_paths` configuration option, use the `--database` option:
|
90
|
+
|
91
|
+
```bash
|
92
|
+
bin/rails g good_job:install --database animals
|
93
|
+
bin/rails db:migrate:animals
|
94
|
+
```
|
95
|
+
|
89
96
|
1. Configure the ActiveJob adapter:
|
90
97
|
|
91
98
|
```ruby
|
@@ -128,7 +135,7 @@ For more of the story of GoodJob, read the [introductory blog post](https://isla
|
|
128
135
|
$ GOOD_JOB_EXECUTION_MODE=async rails server
|
129
136
|
```
|
130
137
|
|
131
|
-
Additional configuration is likely necessary, see the reference below for
|
138
|
+
Additional configuration is likely necessary, see the reference below for configuration.
|
132
139
|
|
133
140
|
## Compatibility
|
134
141
|
|
@@ -219,6 +226,7 @@ config.good_job.poll_interval = 30 # seconds
|
|
219
226
|
config.good_job.shutdown_timeout = 25 # seconds
|
220
227
|
config.good_job.enable_cron = true
|
221
228
|
config.good_job.cron = { example: { cron: '0 * * * *', class: 'ExampleJob' } }
|
229
|
+
config.good_job.queues = '*'
|
222
230
|
|
223
231
|
# ...or all at once.
|
224
232
|
config.good_job = {
|
@@ -233,6 +241,7 @@ config.good_job = {
|
|
233
241
|
class: 'ExampleJob'
|
234
242
|
},
|
235
243
|
},
|
244
|
+
queues: '*',
|
236
245
|
}
|
237
246
|
```
|
238
247
|
|
@@ -241,7 +250,7 @@ Available configuration options are:
|
|
241
250
|
- `execution_mode` (symbol) specifies how and where jobs should be executed. You can also set this with the environment variable `GOOD_JOB_EXECUTION_MODE`. It can be any one of:
|
242
251
|
- `:inline` executes jobs immediately in whatever process queued them (usually the web server process). This should only be used in test and development environments.
|
243
252
|
- `:external` causes the adapter to enqueue jobs, but not execute them. When using this option (the default for production environments), you’ll need to use the command-line tool to actually execute your jobs.
|
244
|
-
- `:async` (or `:async_server`) executes jobs in separate threads within the Rails
|
253
|
+
- `:async` (or `:async_server`) executes jobs in separate threads within the Rails web server process (`bundle exec rails server`). It can be more economical for small workloads because you don’t need a separate machine or environment for running your jobs, but if your web server is under heavy load or your jobs require a lot of resources, you should choose `:external` instead. When not in the Rails web server, jobs will execute in `:external` mode to ensure jobs are not executed within `rails console`, `rails db:migrate`, `rails assets:prepare`, etc.
|
245
254
|
- `:async_all` executes jobs in separate threads in _any_ Rails process.
|
246
255
|
- `max_threads` (integer) sets the maximum number of threads to use when `execution_mode` is set to `:async`. You can also set this with the environment variable `GOOD_JOB_MAX_THREADS`.
|
247
256
|
- `queues` (string) determines which queues to execute jobs from when `execution_mode` is set to `:async`. See the description of `good_job start` for more details on the format of this string. You can also set this with the environment variable `GOOD_JOB_QUEUES`.
|
@@ -387,7 +396,7 @@ config.good_job.enable_cron = ENV['DYNO'] == 'worker.1' # or `true` or via $GOOD
|
|
387
396
|
|
388
397
|
# Configure cron with a hash that has a unique key for each recurring job
|
389
398
|
config.good_job.cron = {
|
390
|
-
# Every 15 minutes, enqueue `ExampleJob.set(priority: -10).perform_later(
|
399
|
+
# Every 15 minutes, enqueue `ExampleJob.set(priority: -10).perform_later(42, name: "Alice")`
|
391
400
|
frequent_task: { # each recurring job must have a unique key
|
392
401
|
cron: "*/15 * * * *", # cron-style scheduling format by fugit gem
|
393
402
|
class: "ExampleJob", # reference the Job class with a string
|
@@ -419,6 +428,12 @@ To perform upgrades to the GoodJob database tables:
|
|
419
428
|
bin/rails g good_job:update
|
420
429
|
```
|
421
430
|
|
431
|
+
Optional: If using Rails' multiple databases with the `migrations_paths` configuration option, use the `--database` option:
|
432
|
+
|
433
|
+
```bash
|
434
|
+
$ bin/rails g good_job:update --database animals
|
435
|
+
```
|
436
|
+
|
422
437
|
1. Run the database migration locally
|
423
438
|
|
424
439
|
```bash
|
@@ -599,7 +614,7 @@ Keep in mind, queue operations and management is an advanced discipline. This st
|
|
599
614
|
|
600
615
|
### Database connections
|
601
616
|
|
602
|
-
Each GoodJob execution thread requires its own database connection that is automatically checked out from Rails’
|
617
|
+
Each GoodJob execution thread requires its own database connection that is automatically checked out from Rails’ connection pool. _Allowing GoodJob to create more threads than available database connections can lead to timeouts and is not recommended._ For example:
|
603
618
|
|
604
619
|
```yaml
|
605
620
|
# config/database.yml
|
@@ -608,7 +623,7 @@ pool: <%= [ENV.fetch("RAILS_MAX_THREADS", 5).to_i, ENV.fetch("GOOD_JOB_MAX_THREA
|
|
608
623
|
|
609
624
|
### Execute jobs async / in-process
|
610
625
|
|
611
|
-
GoodJob can execute jobs "async" in the same process as the
|
626
|
+
GoodJob can execute jobs "async" in the same process as the web server (e.g. `bin/rails s`). GoodJob's async execution mode offers benefits of economy by not requiring a separate job worker process, but with the tradeoff of increased complexity. Async mode can be configured in two ways:
|
612
627
|
|
613
628
|
- Via Rails configuration:
|
614
629
|
|
@@ -642,7 +657,7 @@ Depending on your application configuration, you may need to take additional ste
|
|
642
657
|
pool: <%= ENV.fetch("RAILS_MAX_THREADS", 5).to_i + ENV.fetch("GOOD_JOB_MAX_THREADS", 4).to_i %>
|
643
658
|
```
|
644
659
|
|
645
|
-
- When running Puma with workers (`WEB_CONCURRENCY > 0`) or another process-forking
|
660
|
+
- When running Puma with workers (`WEB_CONCURRENCY > 0`) or another process-forking web server, GoodJob's threadpool schedulers should be stopped before forking, restarted after fork, and cleanly shut down on exit. Stopping GoodJob's scheduler pre-fork is recommended to ensure that GoodJob does not continue executing jobs in the parent/controller process. For example, with Puma:
|
646
661
|
|
647
662
|
```ruby
|
648
663
|
# config/puma.rb
|
@@ -1,23 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'rails/generators'
|
3
3
|
require 'rails/generators/active_record'
|
4
|
+
|
4
5
|
module GoodJob
|
5
6
|
#
|
6
7
|
# Rails generator used for setting up GoodJob in a Rails application.
|
7
8
|
# Run it with +bin/rails g good_job:install+ in your console.
|
8
9
|
#
|
9
10
|
class InstallGenerator < Rails::Generators::Base
|
10
|
-
include
|
11
|
+
include ActiveRecord::Generators::Migration
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
end
|
13
|
+
TEMPLATES = File.join(File.dirname(__FILE__), "templates/install")
|
14
|
+
source_paths << TEMPLATES
|
15
15
|
|
16
|
-
|
16
|
+
class_option :database, type: :string, aliases: %i(--db), desc: "The database for your migration. By default, the current environment's primary database is used."
|
17
17
|
|
18
18
|
# Generates monolithic migration file that contains all database changes.
|
19
19
|
def create_migration_file
|
20
|
-
migration_template 'migrations/create_good_jobs.rb.erb',
|
20
|
+
migration_template 'migrations/create_good_jobs.rb.erb', File.join(db_migrate_path, "create_good_jobs.rb")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -8,22 +8,20 @@ module GoodJob
|
|
8
8
|
# Run it with +bin/rails g good_job:update+ in your console.
|
9
9
|
#
|
10
10
|
class UpdateGenerator < Rails::Generators::Base
|
11
|
-
include
|
12
|
-
|
13
|
-
class << self
|
14
|
-
delegate :next_migration_number, to: ActiveRecord::Generators::Base
|
15
|
-
end
|
11
|
+
include ActiveRecord::Generators::Migration
|
16
12
|
|
17
13
|
TEMPLATES = File.join(File.dirname(__FILE__), "templates/update")
|
18
14
|
source_paths << TEMPLATES
|
19
15
|
|
16
|
+
class_option :database, type: :string, aliases: %i(--db), desc: "The database for your migration. By default, the current environment's primary database is used."
|
17
|
+
|
20
18
|
# Generates incremental migration files unless they already exist.
|
21
19
|
# All migrations should be idempotent e.g. +add_index+ is guarded with +if_index_exists?+
|
22
20
|
def update_migration_files
|
23
21
|
migration_templates = Dir.children(File.join(TEMPLATES, 'migrations')).sort
|
24
22
|
migration_templates.each do |template_file|
|
25
23
|
destination_file = template_file.match(/^\d*_(.*\.rb)/)[1] # 01_create_good_jobs.rb.erb => create_good_jobs.rb
|
26
|
-
migration_template "migrations/#{template_file}",
|
24
|
+
migration_template "migrations/#{template_file}", File.join(db_migrate_path, destination_file), skip: true
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
data/lib/good_job/adapter.rb
CHANGED
@@ -8,8 +8,8 @@ module GoodJob
|
|
8
8
|
#
|
9
9
|
# - +:inline+ executes jobs immediately in whatever process queued them (usually the web server process). This should only be used in test and development environments.
|
10
10
|
# - +:external+ causes the adapter to enqueue jobs, but not execute them. When using this option (the default for production environments), you'll need to use the command-line tool to actually execute your jobs.
|
11
|
-
# - +:async+ (or +:async_server+) executes jobs in separate threads within the Rails
|
12
|
-
# When not in the Rails
|
11
|
+
# - +:async+ (or +:async_server+) executes jobs in separate threads within the Rails web server process (`bundle exec rails server`). It can be more economical for small workloads because you don't need a separate machine or environment for running your jobs, but if your web server is under heavy load or your jobs require a lot of resources, you should choose +:external+ instead.
|
12
|
+
# When not in the Rails web server, jobs will execute in +:external+ mode to ensure jobs are not executed within `rails console`, `rails db:migrate`, `rails assets:prepare`, etc.
|
13
13
|
# - +:async_all+ executes jobs in any Rails process.
|
14
14
|
#
|
15
15
|
# The default value depends on the Rails environment:
|
data/lib/good_job/version.rb
CHANGED
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.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Sheldon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|