workless 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
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: []