resque-forker 1.0.beta → 1.1.0

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.
data/CHANGELOG CHANGED
@@ -1,2 +1,10 @@
1
- 2010-07-30 v1.0
2
- Extracted from Flowtown with permission
1
+ 2010-08-11 v1.1 Accessible options.
2
+
3
+ Allows accessing options from forker.
4
+ Allows setting verbose and very_verbose options instead of being magically inferred.
5
+ Allows passing workload to fork! method as an option.
6
+
7
+ 2010-08-03 v1.0 First release
8
+
9
+ 2010-07-30 v1.0.beta
10
+ Extracted from Flowtown with permission
data/README.rdoc CHANGED
@@ -34,10 +34,13 @@ Edit this to your needs and place it in script/workers:
34
34
  forker.logger = Rails.logger
35
35
  forker.workload = ["*"] * 4 # 4 workers on all queues
36
36
  forker.user "www-data", "www-data" # don't run as root
37
+ forker.options.interval = 1
38
+ else
39
+ forker.options.verbose = true
37
40
  end
38
41
  end
39
42
  # Stuff to do after forking a worker.
40
- Resque.after_fork do
43
+ Resque.before_first_fork do
41
44
  ActiveRecord::Base.establish_connection
42
45
  end
43
46
  Resque.fork!
data/lib/resque/forker.rb CHANGED
@@ -14,8 +14,10 @@ module Resque
14
14
  # ActiveRecord::Base.connection.disconnect!
15
15
  # forker.logger = Rails.logger
16
16
  # forker.user "nobody", "nobody"
17
+ # forker.workload = ["*"] * 8
18
+ # forker.options.interval = 1
17
19
  # end
18
- # Resque.after_fork do
20
+ # Resque.before_first_fork do
19
21
  # ActiveRecord::Base.establish_connection
20
22
  # end
21
23
  #
@@ -27,14 +29,14 @@ module Resque
27
29
  #
28
30
  # All the forking action is handled by a single call:
29
31
  # # Three workers, processing all queues
30
- # Resque.fork! ["*"] * 3
32
+ # Resque.fork! :workload=>["*"] * 3
31
33
  #
32
34
  # The workload is specified as an array of lists of queues, that way you can
33
35
  # decide how many workers to fork (length of the array) and give each worker
34
36
  # different set of queues to work with. For example, to have four workers
35
37
  # processing import queue, and only two of these also processing export queue:
36
38
  #
37
- # Resque.fork! ["import,export", "import"] * 2
39
+ # forker.workload = ["import,export", "import"] * 2
38
40
  #
39
41
  # Once the process is up and running, you control it by sending signals:
40
42
  # - kill -QUIT -- Quit gracefully
@@ -58,10 +60,14 @@ module Resque
58
60
  # exec script/workers
59
61
  # respawn
60
62
  class Forker
63
+
64
+ Options = Struct.new(:verbose, :very_verbose, :interval, :terminate)
65
+
61
66
  def initialize(options = nil)
62
- @options = options || {}
63
- @logger = @options[:logger] || Logger.new($stderr)
64
- @workload = ["*"]
67
+ options ||= {}
68
+ @logger = options[:logger] || Logger.new($stderr)
69
+ @workload = options[:workload] || ["*"]
70
+ @options = Options[*options.values_at(*Options.members)]
65
71
  @children = []
66
72
  begin
67
73
  require "system_timer"
@@ -79,6 +85,9 @@ module Resque
79
85
  # Defaults to stderr, but you may want to point this at Rails logger.
80
86
  attr_accessor :logger
81
87
 
88
+ # Most options can be changed from the Resque.setup hook. See Options.
89
+ attr_reader :options
90
+
82
91
  # Run and never return.
83
92
  def run
84
93
  @logger.info "** Running as #{Process.pid}"
@@ -149,9 +158,9 @@ module Resque
149
158
  # Run and never return.
150
159
  def run_worker(queues)
151
160
  worker = Resque::Worker.new(*queues.split(","))
152
- worker.verbose = $VERBOSE
153
- worker.very_verbose = $DEBUG
154
- worker.work(@options[:interval] || 5) # interval, will block
161
+ worker.verbose = options.verbose
162
+ worker.very_verbose = options.very_verbose
163
+ worker.work(options.interval || 5) # interval, will block
155
164
  end
156
165
 
157
166
  # Stop child processes and run any teardown action.
@@ -166,7 +175,7 @@ module Resque
166
175
  end
167
176
  reap_children
168
177
  if teardown = Resque.teardown
169
- @timeout.call @options[:terminate] || 5 do
178
+ @timeout.call options.terminate || 5 do
170
179
  begin
171
180
  teardown.call self
172
181
  rescue Exception
@@ -224,9 +233,12 @@ module Resque
224
233
  # - :logger -- Which Logger to use (default logger to stdout)
225
234
  # - :interval -- Processing interval (default to 5 seconds)
226
235
  # - :terminate -- Timeout running teardown block (default to 5 seconds)
227
- def fork!(workload = nil, options = nil)
228
- forker = Resque::Forker.new(options)
229
- forker.workload = workload if workload
230
- forker.run
236
+ # - :verbose -- Be verbose.
237
+ # - :very_verbose -- Make :verbose look quiet.
238
+ # - :workload -- The initial workload.
239
+ #
240
+ # You can also set these options from the Resque.setup hook.
241
+ def fork!(options = nil)
242
+ Resque::Forker.new(options).run
231
243
  end
232
244
  end
@@ -1,9 +1,9 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "resque-forker"
3
- spec.version = "1.0.beta"
3
+ spec.version = "1.1.0"
4
4
  spec.author = "Assaf Arkin"
5
5
  spec.email = "assaf@labnotes.org"
6
- spec.homepage = "http://github.com/assaf/resque-forker"
6
+ spec.homepage = "http://github.com/flowtown/resque-forker"
7
7
  spec.summary = "Super awesome forking action for Resque workers"
8
8
  spec.post_install_message = ""
9
9
 
@@ -11,8 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.has_rdoc = true
13
13
  spec.extra_rdoc_files = "README.rdoc", "CHANGELOG"
14
- spec.rdoc_options = "--title", "Resque Forker #{spec.version}", "--main", "README.rdoc",
15
- "--webcvs", "http://github.com/assaf/#{spec.name}"
14
+ spec.rdoc_options = "--title", "Resque Forker #{spec.version}", "--main", "README.rdoc", "--webcvs", spec.homepage
16
15
 
17
16
  spec.required_ruby_version = '>= 1.8.7'
18
17
  spec.add_dependency "resque"
data/script/workers CHANGED
@@ -9,10 +9,13 @@ Resque.setup do |forker|
9
9
  forker.logger = Rails.logger
10
10
  forker.workload = ["*"] * 4 # 4 workers on all queues
11
11
  forker.user "www-data", "www-data" # don't run as root
12
+ forker.options.interval = 1
13
+ else
14
+ forker.options.verbose = true
12
15
  end
13
16
  end
14
17
  # Stuff to do after forking a worker.
15
- Resque.after_fork do
18
+ Resque.before_first_fork do
16
19
  ActiveRecord::Base.establish_connection
17
20
  end
18
21
  Resque.fork!
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-forker
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31098137
5
- prerelease: true
4
+ hash: 19
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - beta
10
- version: 1.0.beta
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Assaf Arkin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-30 00:00:00 -07:00
18
+ date: 2010-08-11 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -50,17 +50,17 @@ files:
50
50
  - Rakefile
51
51
  - resque-forker.gemspec
52
52
  has_rdoc: true
53
- homepage: http://github.com/assaf/resque-forker
53
+ homepage: http://github.com/flowtown/resque-forker
54
54
  licenses: []
55
55
 
56
56
  post_install_message: ""
57
57
  rdoc_options:
58
58
  - --title
59
- - Resque Forker 1.0.beta
59
+ - Resque Forker 1.1.0
60
60
  - --main
61
61
  - README.rdoc
62
62
  - --webcvs
63
- - http://github.com/assaf/resque-forker
63
+ - http://github.com/flowtown/resque-forker
64
64
  require_paths:
65
65
  - lib
66
66
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -77,14 +77,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
77
  required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  none: false
79
79
  requirements:
80
- - - ">"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- hash: 25
82
+ hash: 3
83
83
  segments:
84
- - 1
85
- - 3
86
- - 1
87
- version: 1.3.1
84
+ - 0
85
+ version: "0"
88
86
  requirements: []
89
87
 
90
88
  rubyforge_project: