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 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 likly the latest version (3.0.1)
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.
@@ -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
- after_commit "self.class.scaler.down", :on => :update, :unless => Proc.new {|r| r.failed_at.nil? }
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
- "script"
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
- unless jobs.count > 0 and workers > 0
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.1
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: 1.8.23
120
+ rubygems_version: 2.0.3
133
121
  signing_key:
134
- specification_version: 3
122
+ specification_version: 4
135
123
  summary: Use delayed job workers only when theyre needed on Heroku
136
124
  test_files: []