rabbit_jobs 0.1.14 → 0.1.15
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/lib/rabbit_jobs/error_mailer.rb +4 -6
- data/lib/rabbit_jobs/job.rb +1 -3
- data/lib/rabbit_jobs/version.rb +1 -1
- data/lib/rabbit_jobs/worker.rb +58 -53
- data/spec/unit/mailer_spec.rb +1 -1
- metadata +4 -4
@@ -5,15 +5,13 @@ module RabbitJobs
|
|
5
5
|
defined?(ActionMailer) && !!RabbitJobs.config.mail_errors_from && !RabbitJobs.config.mail_errors_from.empty?
|
6
6
|
end
|
7
7
|
|
8
|
-
def self.
|
8
|
+
def self.report_error(job, error = $!)
|
9
9
|
return unless enabled?
|
10
10
|
|
11
|
-
raise "You must require action_mailer or turn of error reporting in config." unless defined?(ActionMailer)
|
12
|
-
|
13
11
|
params ||= []
|
14
12
|
|
15
13
|
params_str = job.params == [] ? '' : job.params.map { |p| p.inspect }.join(', ')
|
16
|
-
subject = "RJ:Worker: #{error.class} on #{job.class}
|
14
|
+
subject = "RJ:Worker: #{error.class} on #{job.class}"
|
17
15
|
text = "\n#{job.class}.perform(#{params_str})\n"
|
18
16
|
text += "\n#{error.inspect}\n"
|
19
17
|
text += "\nBacktrace:\n#{error.backtrace.join("\n")}" if error.backtrace
|
@@ -27,8 +25,8 @@ module RabbitJobs
|
|
27
25
|
begin
|
28
26
|
letter.deliver
|
29
27
|
rescue
|
30
|
-
RJ.logger.error $!.
|
28
|
+
RJ.logger.error [$!.message, $!.backtrace].flatten.join("\n")
|
31
29
|
end
|
32
30
|
end
|
33
31
|
end
|
34
|
-
end
|
32
|
+
end
|
data/lib/rabbit_jobs/job.rb
CHANGED
@@ -34,7 +34,7 @@ module RabbitJobs::Job
|
|
34
34
|
RJ.logger.warn(self.inspect)
|
35
35
|
RJ.logger.warn([$!.inspect, $!.backtrace.to_a].join("\n"))
|
36
36
|
run_on_error_hooks($!)
|
37
|
-
RabbitJobs::ErrorMailer.
|
37
|
+
RabbitJobs::ErrorMailer.report_error(self, $!)
|
38
38
|
end
|
39
39
|
exit!
|
40
40
|
end
|
@@ -112,8 +112,6 @@ module RabbitJobs::Job
|
|
112
112
|
RJ.logger.error $!.inspect
|
113
113
|
RJ.logger.error $!.backtrace
|
114
114
|
RJ.logger.error "message: #{payload.inspect}"
|
115
|
-
# Mailer.send(klass_name, params, $!)
|
116
|
-
# raise $!
|
117
115
|
end
|
118
116
|
end
|
119
117
|
end
|
data/lib/rabbit_jobs/version.rb
CHANGED
data/lib/rabbit_jobs/worker.rb
CHANGED
@@ -4,7 +4,7 @@ module RabbitJobs
|
|
4
4
|
class Worker
|
5
5
|
include AmqpHelpers
|
6
6
|
|
7
|
-
attr_accessor :pidfile, :background, :process_name
|
7
|
+
attr_accessor :pidfile, :background, :process_name, :worker_pid
|
8
8
|
|
9
9
|
# Workers should be initialized with an array of string queue
|
10
10
|
# names. The order is important: a Worker will check the first
|
@@ -36,59 +36,72 @@ module RabbitJobs
|
|
36
36
|
$0 = self.process_name || "rj_worker (#{queues.join(',')})"
|
37
37
|
|
38
38
|
processed_count = 0
|
39
|
-
|
40
|
-
exchange.channel.prefetch(1)
|
39
|
+
RJ.logger.info("Connecting to amqp...")
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
RJ.logger.info "Stopping worker ##{Process.pid}..."
|
41
|
+
begin
|
42
|
+
amqp_with_exchange do |connection, exchange|
|
43
|
+
exchange.channel.prefetch(1)
|
46
44
|
|
47
|
-
|
48
|
-
|
49
|
-
RJ.logger.info "
|
50
|
-
RJ.logger.
|
45
|
+
check_shutdown = Proc.new {
|
46
|
+
if @shutdown
|
47
|
+
RJ.logger.info "Processed jobs: #{processed_count}"
|
48
|
+
RJ.logger.info "Stopping worker ##{Process.pid}..."
|
51
49
|
|
52
|
-
|
53
|
-
|
50
|
+
connection.close {
|
51
|
+
File.delete(self.pidfile) if self.pidfile && File.exists?(self.pidfile)
|
52
|
+
RJ.logger.info "##{Process.pid} stopped."
|
53
|
+
RJ.logger.close
|
54
|
+
|
55
|
+
EM.stop {
|
56
|
+
exit!
|
57
|
+
}
|
54
58
|
}
|
55
|
-
|
56
|
-
|
57
|
-
|
59
|
+
end
|
60
|
+
}
|
61
|
+
|
62
|
+
queues.each do |routing_key|
|
63
|
+
queue = make_queue(exchange, routing_key)
|
58
64
|
|
59
|
-
|
60
|
-
queue = make_queue(exchange, routing_key)
|
65
|
+
RJ.logger.info "Worker ##{Process.pid} <= #{exchange.name}##{routing_key}"
|
61
66
|
|
62
|
-
|
67
|
+
explicit_ack = !!RJ.config[:queues][routing_key][:ack]
|
63
68
|
|
64
|
-
|
69
|
+
queue.subscribe(ack: explicit_ack) do |metadata, payload|
|
70
|
+
@job = RJ::Job.parse(payload)
|
65
71
|
|
66
|
-
|
67
|
-
|
72
|
+
unless @job.expired?
|
73
|
+
@job.run_perform
|
74
|
+
processed_count += 1
|
75
|
+
else
|
76
|
+
RJ.logger.info "Job expired: #{@job.inspect}"
|
77
|
+
end
|
68
78
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
else
|
73
|
-
RJ.logger.info "Job expired: #{@job.inspect}"
|
79
|
+
metadata.ack if explicit_ack
|
80
|
+
|
81
|
+
check_shutdown.call
|
74
82
|
end
|
83
|
+
end
|
75
84
|
|
76
|
-
|
85
|
+
if time > 0
|
86
|
+
# for debugging
|
87
|
+
EM.add_timer(time) do
|
88
|
+
self.shutdown
|
89
|
+
end
|
90
|
+
end
|
77
91
|
|
92
|
+
EM.add_periodic_timer(1) do
|
78
93
|
check_shutdown.call
|
79
94
|
end
|
80
95
|
end
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
96
|
+
rescue
|
97
|
+
error = $!
|
98
|
+
if RJ.logger
|
99
|
+
begin
|
100
|
+
RJ.logger.error [error.message, error.backtrace].flatten.join("\n")
|
101
|
+
ensure
|
102
|
+
abort(error.message)
|
86
103
|
end
|
87
104
|
end
|
88
|
-
|
89
|
-
EM.add_periodic_timer(1) do
|
90
|
-
check_shutdown.call
|
91
|
-
end
|
92
105
|
end
|
93
106
|
|
94
107
|
true
|
@@ -103,21 +116,18 @@ module RabbitJobs
|
|
103
116
|
RabbitJobs::Util.check_pidfile(self.pidfile) if self.pidfile
|
104
117
|
|
105
118
|
if self.background
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
# daemonize child process
|
111
|
-
Process.daemon(true)
|
112
|
-
end
|
119
|
+
return false if self.worker_pid = fork
|
120
|
+
|
121
|
+
# daemonize child process
|
122
|
+
Process.daemon(true)
|
113
123
|
end
|
114
124
|
|
125
|
+
self.worker_pid ||= Process.pid
|
126
|
+
|
115
127
|
if self.pidfile
|
116
128
|
File.open(self.pidfile, 'w') { |f| f << Process.pid }
|
117
129
|
end
|
118
130
|
|
119
|
-
# Fix buffering so we can `rake rj:work > resque.log` and
|
120
|
-
# get output from the child in there.
|
121
131
|
$stdout.sync = true
|
122
132
|
|
123
133
|
@shutdown = false
|
@@ -135,13 +145,8 @@ module RabbitJobs
|
|
135
145
|
|
136
146
|
def kill_child
|
137
147
|
if @job && @job.child_pid
|
138
|
-
|
139
|
-
|
140
|
-
Process.kill("KILL", @job.child_pid) rescue nil
|
141
|
-
else
|
142
|
-
# RJ.logger.info "Child #{@child} not found, restarting."
|
143
|
-
# shutdown
|
144
|
-
end
|
148
|
+
RJ.logger.info "Killing child #{@job.child_pid} at #{Time.now}"
|
149
|
+
Process.kill("KILL", @job.child_pid) rescue nil
|
145
150
|
end
|
146
151
|
end
|
147
152
|
end
|
data/spec/unit/mailer_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe RabbitJobs::ErrorMailer do
|
|
21
21
|
mock(email).deliver { }
|
22
22
|
mock(RabbitJobs::ErrorMailer).enabled? { true }
|
23
23
|
|
24
|
-
RabbitJobs::ErrorMailer.
|
24
|
+
RabbitJobs::ErrorMailer.report_error(TestJob.new, RuntimeError.new('error text'))
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbit_jobs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: amqp
|
@@ -129,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: '0'
|
130
130
|
segments:
|
131
131
|
- 0
|
132
|
-
hash:
|
132
|
+
hash: 4442654216517974901
|
133
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
134
|
none: false
|
135
135
|
requirements:
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: '0'
|
139
139
|
segments:
|
140
140
|
- 0
|
141
|
-
hash:
|
141
|
+
hash: 4442654216517974901
|
142
142
|
requirements: []
|
143
143
|
rubyforge_project:
|
144
144
|
rubygems_version: 1.8.24
|