workless 1.2.1 → 1.2.2
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 +7 -0
- data/README.md +10 -2
- data/lib/workless/scaler.rb +7 -9
- data/lib/workless/scalers/local.rb +4 -7
- metadata +16 -28
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ea1dd3f5f583daec32776ca0f8b27844c8605ffb
|
4
|
+
data.tar.gz: 4b4c6e03730f39e7f7e5163bb2a1b76571906a25
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3f1cce18096c12ac5076792ae9aa2c6f63a67b097dfe01192e9a3439e334a0c1a928c84f2e2cf172237c86a033be747a97fb34118ab9b9cf495d1c219cbee8b8
|
7
|
+
data.tar.gz: 220d5ae97dd5b358efb3c6a7f38c1a6b2a5a20b2df6ce99164bb112bb78127c546e11be8456c9bf326b43e407acad3de004dd5ab94191ed6ed7de434df06d072
|
data/README.md
CHANGED
@@ -11,6 +11,7 @@ By adding the gem to your project and configuring our Heroku app with some confi
|
|
11
11
|
|
12
12
|
## Updates
|
13
13
|
|
14
|
+
* Version 1.2.2 includes after_commit fix by @collectiveip
|
14
15
|
* Version 1.2.1 includes support for Rails 4 & DJ 4 by @florentmorin
|
15
16
|
* Version 1.2.0 includes new support for Sequel by @davidakachaos
|
16
17
|
* Version 1.1.3 includes changes by @radanskoric to reduce number of heroku api calls
|
@@ -54,7 +55,7 @@ gem "delayed_job_active_record"
|
|
54
55
|
gem "workless", "~> 1.1.3"
|
55
56
|
</pre>
|
56
57
|
|
57
|
-
If you don't specify delayed_job in your Gemfile workless will bring it in, most
|
58
|
+
If you don't specify delayed_job in your Gemfile workless will bring it in, most likely the latest version (3.0.1)
|
58
59
|
|
59
60
|
Add your Heroku app name / [API key](https://devcenter.heroku.com/articles/authentication) as config vars to your Heroku instance.
|
60
61
|
|
@@ -84,7 +85,7 @@ Delayed::Job.scaler = :heroku_cedar
|
|
84
85
|
Delayed::Job.scaler = :local
|
85
86
|
</pre>
|
86
87
|
|
87
|
-
The local scaler uses @adamwiggins rush library http://github.com/adamwiggins/rush to start and stop workers on a local machine
|
88
|
+
The local scaler uses @adamwiggins rush library http://github.com/adamwiggins/rush to start and stop workers on a local machine. The local scaler also relies on script/delayed_job (which in turn requires the daemon gem). If you have been using foreman to run your workers, go back and see the delayed_job [setup instructions](https://github.com/collectiveidea/delayed_job/blob/master/README.md).
|
88
89
|
|
89
90
|
The heroku scaler works on the Aspen and Bamboo stacks while the heroku_cedar scaler only works on the new Cedar stack.
|
90
91
|
|
@@ -100,6 +101,13 @@ heroku config:add WORKLESS_WORKERS_RATIO=50
|
|
100
101
|
|
101
102
|
In this example, it will scale up to a maximum of 10 workers, firing up 1 worker for every 50 jobs on the queue. The minimum will be 0 workers, but you could set it to a higher value if you want.
|
102
103
|
|
104
|
+
## How does Workless work?
|
105
|
+
|
106
|
+
- `Delayed::Workless::Scaler` is mixed into the `Delayed::Job` class, which adds a bunch of callbacks to it.
|
107
|
+
- When a job is created on the database, a `create` callback starts a worker.
|
108
|
+
- The worker runs the job, which removes it from the database.
|
109
|
+
- A `destroy` callback stops the worker.
|
110
|
+
|
103
111
|
## Note on Patches/Pull Requests
|
104
112
|
|
105
113
|
* Please fork the project.
|
data/lib/workless/scaler.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
|
-
require 'workless/scalers/heroku'
|
2
|
-
require 'workless/scalers/heroku_cedar'
|
3
|
-
require 'workless/scalers/local'
|
4
|
-
require 'workless/scalers/null'
|
5
|
-
|
6
1
|
module Delayed
|
7
2
|
module Workless
|
8
3
|
module Scaler
|
9
4
|
|
5
|
+
autoload :Heroku, "workless/scalers/heroku"
|
6
|
+
autoload :HerokuCedar, "workless/scalers/heroku_cedar"
|
7
|
+
autoload :Local, "workless/scalers/local"
|
8
|
+
autoload :Null, "workless/scalers/null"
|
9
|
+
|
10
10
|
def self.included(base)
|
11
11
|
base.send :extend, ClassMethods
|
12
12
|
if base.to_s =~ /ActiveRecord/
|
13
13
|
base.class_eval do
|
14
|
-
after_commit "self.class.scaler.down", :on => :destroy
|
14
|
+
after_commit "self.class.scaler.down", :on => [:destroy, :update], :if => Proc.new {|r| r.destroyed? or !r.failed_at.nil? }
|
15
15
|
after_commit "self.class.scaler.up", :on => :create
|
16
|
-
|
17
|
-
end
|
16
|
+
end
|
18
17
|
elsif base.to_s =~ /Sequel/
|
19
18
|
base.send(:define_method, 'after_destroy') do
|
20
19
|
super
|
@@ -35,7 +34,6 @@ module Delayed
|
|
35
34
|
after_update "self.class.scaler.down", :unless => Proc.new {|r| r.failed_at.nil? }
|
36
35
|
end
|
37
36
|
end
|
38
|
-
|
39
37
|
end
|
40
38
|
|
41
39
|
module ClassMethods
|
@@ -3,14 +3,13 @@ require 'rush'
|
|
3
3
|
module Delayed
|
4
4
|
module Workless
|
5
5
|
module Scaler
|
6
|
-
|
7
6
|
class Local < Base
|
8
|
-
|
9
|
-
def executable_prefix
|
7
|
+
|
8
|
+
def self.executable_prefix
|
10
9
|
if defined? Delayed::Compatibility.executable_prefix
|
11
10
|
Delayed::Compatibility.executable_prefix
|
12
11
|
else
|
13
|
-
|
12
|
+
'script'
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
@@ -23,7 +22,7 @@ module Delayed
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def self.down
|
26
|
-
|
25
|
+
if self.workers > 0 and jobs.count == 0
|
27
26
|
Rush::Box.new[Rails.root].bash("#{executable_prefix}/delayed_job stop -i workless", :background => true)
|
28
27
|
end
|
29
28
|
true
|
@@ -32,9 +31,7 @@ module Delayed
|
|
32
31
|
def self.workers
|
33
32
|
Rush::Box.new.processes.filter(:cmdline => /delayed_job start -i workless|delayed_job.workless/).size
|
34
33
|
end
|
35
|
-
|
36
34
|
end
|
37
|
-
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- lostboy
|
@@ -14,81 +13,71 @@ dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: heroku-api
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rush
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: delayed_job
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: 2.0.7
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: 2.0.7
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
description: Extension to Delayed Job to enable workers to scale up when needed
|
@@ -111,26 +100,25 @@ files:
|
|
111
100
|
- README.md
|
112
101
|
homepage: http://github.com/lostboy/workless
|
113
102
|
licenses: []
|
103
|
+
metadata: {}
|
114
104
|
post_install_message:
|
115
105
|
rdoc_options: []
|
116
106
|
require_paths:
|
117
107
|
- lib
|
118
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
109
|
requirements:
|
121
|
-
- -
|
110
|
+
- - '>='
|
122
111
|
- !ruby/object:Gem::Version
|
123
112
|
version: '0'
|
124
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
114
|
requirements:
|
127
|
-
- -
|
115
|
+
- - '>='
|
128
116
|
- !ruby/object:Gem::Version
|
129
117
|
version: 1.3.6
|
130
118
|
requirements: []
|
131
119
|
rubyforge_project:
|
132
|
-
rubygems_version:
|
120
|
+
rubygems_version: 2.0.3
|
133
121
|
signing_key:
|
134
|
-
specification_version:
|
122
|
+
specification_version: 4
|
135
123
|
summary: Use delayed job workers only when theyre needed on Heroku
|
136
124
|
test_files: []
|