external_resque_worker 0.0.2 → 0.0.4
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.
- metadata +8 -9
- data/MIT-LICENSE +0 -20
- data/README.md +0 -1
- data/lib/external_resque_worker.rb +0 -92
metadata
CHANGED
@@ -1,38 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: external_resque_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Gordon
|
14
14
|
- Joel Meador
|
15
15
|
- Chris Moore
|
16
|
+
- Jason Gladish
|
16
17
|
autorequire:
|
17
18
|
bindir: bin
|
18
19
|
cert_chain: []
|
19
20
|
|
20
|
-
date:
|
21
|
+
date: 2012-01-04 00:00:00 -05:00
|
21
22
|
default_executable:
|
22
23
|
dependencies: []
|
23
24
|
|
24
25
|
description: Easy way to manage running one or more resque processes during testing
|
25
|
-
email: matt@expectedbehavior.com
|
26
|
+
email: matt@expectedbehavior.com joel@expectedbehavior.com jason@expectedbehavior.com chris@monoclesoftware.com
|
26
27
|
executables: []
|
27
28
|
|
28
29
|
extensions: []
|
29
30
|
|
30
31
|
extra_rdoc_files: []
|
31
32
|
|
32
|
-
files:
|
33
|
-
|
34
|
-
- MIT-LICENSE
|
35
|
-
- lib/external_resque_worker.rb
|
33
|
+
files: []
|
34
|
+
|
36
35
|
has_rdoc: true
|
37
36
|
homepage: http://expectedbehavior.com
|
38
37
|
licenses: []
|
data/MIT-LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright (c) 2010 [Expected Behavior, LLC]
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
we totally got the original code from somehwere, but I don't know where
|
@@ -1,92 +0,0 @@
|
|
1
|
-
class ExternalResqueWorker
|
2
|
-
DEFAULT_STARTUP_TIMEOUT = 1.minute
|
3
|
-
|
4
|
-
attr_accessor :pid, :startup_timeout
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
start
|
8
|
-
end
|
9
|
-
|
10
|
-
def start
|
11
|
-
raise "PEDANTICALLY CODED TO ONLY WORK IN TEST ENV" unless Rails.env.test?
|
12
|
-
install_hooks_on_startup
|
13
|
-
if self.pid = fork
|
14
|
-
Process.detach(pid)
|
15
|
-
wait_for_worker_to_start
|
16
|
-
else
|
17
|
-
STDOUT.reopen(File.open("#{Rails.root}/log/external_resque_worker.log", "a+")) # stops it from giving us the extra test output
|
18
|
-
start_child
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.kill_all_existing_workers
|
23
|
-
while Resque::Worker.all.size > 0
|
24
|
-
Resque::Worker.all.each do |w|
|
25
|
-
Process.kill("TERM", w.pid) rescue nil
|
26
|
-
w.prune_dead_workers
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def install_hooks_on_startup
|
32
|
-
install_pause_on_start_hook
|
33
|
-
end
|
34
|
-
|
35
|
-
def process_all
|
36
|
-
unpause
|
37
|
-
sleep 1 until done?
|
38
|
-
pause
|
39
|
-
end
|
40
|
-
|
41
|
-
def pause(pid = self.pid)
|
42
|
-
Process.kill("USR2", pid)
|
43
|
-
end
|
44
|
-
|
45
|
-
def unpause
|
46
|
-
Process.kill("CONT", pid)
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def done?
|
52
|
-
all_queues_empty = Resque.queues.all? do |queue|
|
53
|
-
Resque.peek(queue).blank?
|
54
|
-
end
|
55
|
-
all_queues_empty and Resque::Worker.working.empty?
|
56
|
-
end
|
57
|
-
|
58
|
-
def start_parent
|
59
|
-
at_exit do
|
60
|
-
Process.kill("KILL", pid) if pid
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def start_child
|
65
|
-
# Array form of exec() is required here, otherwise the worker is not a direct
|
66
|
-
# child process of test.
|
67
|
-
# If it's not the direct child process then the PID returned from fork() is
|
68
|
-
# wrong, which means we can't communicate with the worker.
|
69
|
-
exec('rake', "--silent", 'resque:work', "QUEUE=*", "INTERVAL=0.25", "RAILS_ENV=test")
|
70
|
-
end
|
71
|
-
|
72
|
-
def wait_for_worker_to_start
|
73
|
-
self.startup_timeout ||= DEFAULT_STARTUP_TIMEOUT
|
74
|
-
start = Time.now.to_i
|
75
|
-
while (Time.now.to_i - start) < startup_timeout
|
76
|
-
return if worker_started?
|
77
|
-
sleep 1
|
78
|
-
end
|
79
|
-
|
80
|
-
raise "Timeout while waiting for the worker to start. Waited #{startup_timeout} seconds."
|
81
|
-
end
|
82
|
-
|
83
|
-
def worker_started?
|
84
|
-
Resque.workers.any? { |worker| worker.pid == self.pid }
|
85
|
-
end
|
86
|
-
|
87
|
-
def install_pause_on_start_hook
|
88
|
-
Resque.before_first_fork do
|
89
|
-
pause(Process.pid)
|
90
|
-
end unless Resque.before_first_fork
|
91
|
-
end
|
92
|
-
end
|