job_boss 0.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.
Files changed (47) hide show
  1. data/README.markdown +43 -0
  2. data/Rakefile +15 -0
  3. data/bin/job_boss +27 -0
  4. data/doc/ActiveRecord/Base.html +343 -0
  5. data/doc/ActiveRecord.html +185 -0
  6. data/doc/CreateJobs.html +256 -0
  7. data/doc/JobBoss/Boss.html +413 -0
  8. data/doc/JobBoss/Config.html +342 -0
  9. data/doc/JobBoss/Job.html +754 -0
  10. data/doc/JobBoss/Queuer.html +231 -0
  11. data/doc/JobBoss.html +480 -0
  12. data/doc/Mongrel/HttpServer.html +275 -0
  13. data/doc/Mongrel.html +185 -0
  14. data/doc/Passenger/Railz/RequestHandler.html +271 -0
  15. data/doc/Passenger/Railz.html +185 -0
  16. data/doc/Passenger.html +185 -0
  17. data/doc/PhusionPassenger/Rack/RequestHandler.html +271 -0
  18. data/doc/PhusionPassenger/Rack.html +185 -0
  19. data/doc/PhusionPassenger/Railz/RequestHandler.html +271 -0
  20. data/doc/PhusionPassenger/Railz.html +185 -0
  21. data/doc/PhusionPassenger.html +187 -0
  22. data/doc/Rakefile.html +115 -0
  23. data/doc/Spawn/SpawnId.html +276 -0
  24. data/doc/Spawn.html +742 -0
  25. data/doc/bin/job_boss.html +58 -0
  26. data/doc/created.rid +9 -0
  27. data/doc/index.html +126 -0
  28. data/doc/lib/job_boss/boss_rb.html +64 -0
  29. data/doc/lib/job_boss/capistrano_rb.html +60 -0
  30. data/doc/lib/job_boss/configuror_rb.html +54 -0
  31. data/doc/lib/job_boss/job_rb.html +56 -0
  32. data/doc/lib/job_boss/queuer_rb.html +56 -0
  33. data/doc/lib/migrate_rb.html +52 -0
  34. data/doc/rdoc.css +706 -0
  35. data/doc/vendor/spawn/CHANGELOG.html +275 -0
  36. data/doc/vendor/spawn/LICENSE.html +151 -0
  37. data/doc/vendor/spawn/init_rb.html +54 -0
  38. data/doc/vendor/spawn/lib/patches_rb.html +56 -0
  39. data/doc/vendor/spawn/lib/spawn_rb.html +52 -0
  40. data/job_boss.gemspec +26 -0
  41. data/lib/job_boss/boss.rb +153 -0
  42. data/lib/job_boss/capistrano.rb +8 -0
  43. data/lib/job_boss/configuror.rb +40 -0
  44. data/lib/job_boss/job.rb +155 -0
  45. data/lib/job_boss/queuer.rb +37 -0
  46. data/lib/migrate.rb +27 -0
  47. metadata +151 -0
data/doc/Spawn.html ADDED
@@ -0,0 +1,742 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
+
8
+ <title>Module: Spawn</title>
9
+
10
+ <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="./js/jquery.js" type="text/javascript"
13
+ charset="utf-8"></script>
14
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
15
+ charset="utf-8"></script>
16
+ <script src="./js/quicksearch.js" type="text/javascript"
17
+ charset="utf-8"></script>
18
+ <script src="./js/darkfish.js" type="text/javascript"
19
+ charset="utf-8"></script>
20
+
21
+ </head>
22
+ <body class="module">
23
+
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="file-metadata">
36
+ <div id="file-list-section" class="section">
37
+ <h3 class="section-header">In Files</h3>
38
+ <div class="section-body">
39
+ <ul>
40
+
41
+ <li><a href="./vendor/spawn/lib/spawn_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="vendor/spawn/lib/spawn.rb">vendor/spawn/lib/spawn.rb</a></li>
43
+
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+
49
+ </div>
50
+
51
+ <div id="class-metadata">
52
+
53
+ <!-- Parent Class -->
54
+
55
+
56
+ <!-- Namespace Contents -->
57
+
58
+ <div id="namespace-list-section" class="section">
59
+ <h3 class="section-header">Namespace</h3>
60
+ <ul class="link-list">
61
+
62
+ <li><span class="type">CLASS</span> <a href="Spawn/SpawnId.html">Spawn::SpawnId</a></li>
63
+
64
+ </ul>
65
+ </div>
66
+
67
+
68
+ <!-- Method Quickref -->
69
+
70
+ <div id="method-list-section" class="section">
71
+ <h3 class="section-header">Methods</h3>
72
+ <ul class="link-list">
73
+
74
+ <li><a href="#method-c-alive%3F">::alive?</a></li>
75
+
76
+ <li><a href="#method-c-close_resources">::close_resources</a></li>
77
+
78
+ <li><a href="#method-c-default_options">::default_options</a></li>
79
+
80
+ <li><a href="#method-c-kill_punks">::kill_punks</a></li>
81
+
82
+ <li><a href="#method-c-method">::method</a></li>
83
+
84
+ <li><a href="#method-c-resources_to_close">::resources_to_close</a></li>
85
+
86
+ <li><a href="#method-i-fork_it">#fork_it</a></li>
87
+
88
+ <li><a href="#method-i-spawn">#spawn</a></li>
89
+
90
+ <li><a href="#method-i-thread_it">#thread_it</a></li>
91
+
92
+ <li><a href="#method-i-wait">#wait</a></li>
93
+
94
+ </ul>
95
+ </div>
96
+
97
+
98
+ <!-- Included Modules -->
99
+
100
+ </div>
101
+
102
+ <div id="project-metadata">
103
+
104
+
105
+ <div id="fileindex-section" class="section project-section">
106
+ <h3 class="section-header">Files</h3>
107
+ <ul>
108
+
109
+ <li class="file"><a href="./Rakefile.html">Rakefile</a></li>
110
+
111
+ <li class="file"><a href="./vendor/spawn/CHANGELOG.html">CHANGELOG</a></li>
112
+
113
+ <li class="file"><a href="./vendor/spawn/LICENSE.html">LICENSE</a></li>
114
+
115
+ </ul>
116
+ </div>
117
+
118
+
119
+ <div id="classindex-section" class="section project-section">
120
+ <h3 class="section-header">Class Index
121
+ <span class="search-toggle"><img src="./images/find.png"
122
+ height="16" width="16" alt="[+]"
123
+ title="show/hide quicksearch" /></span></h3>
124
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
125
+ <fieldset>
126
+ <legend>Quicksearch</legend>
127
+ <input type="text" name="quicksearch" value=""
128
+ class="quicksearch-field" />
129
+ </fieldset>
130
+ </form>
131
+
132
+ <ul class="link-list">
133
+
134
+ <li><a href="./JobBoss.html">JobBoss</a></li>
135
+
136
+ <li><a href="./JobBoss/Boss.html">JobBoss::Boss</a></li>
137
+
138
+ <li><a href="./JobBoss/Config.html">JobBoss::Config</a></li>
139
+
140
+ <li><a href="./JobBoss/Job.html">JobBoss::Job</a></li>
141
+
142
+ <li><a href="./JobBoss/Queuer.html">JobBoss::Queuer</a></li>
143
+
144
+ <li><a href="./PhusionPassenger.html">PhusionPassenger</a></li>
145
+
146
+ <li><a href="./PhusionPassenger/Rack.html">PhusionPassenger::Rack</a></li>
147
+
148
+ <li><a href="./PhusionPassenger/Rack/RequestHandler.html">PhusionPassenger::Rack::RequestHandler</a></li>
149
+
150
+ <li><a href="./PhusionPassenger/Railz.html">PhusionPassenger::Railz</a></li>
151
+
152
+ <li><a href="./PhusionPassenger/Railz/RequestHandler.html">PhusionPassenger::Railz::RequestHandler</a></li>
153
+
154
+ <li><a href="./Passenger.html">Passenger</a></li>
155
+
156
+ <li><a href="./Passenger/Railz.html">Passenger::Railz</a></li>
157
+
158
+ <li><a href="./Passenger/Railz/RequestHandler.html">Passenger::Railz::RequestHandler</a></li>
159
+
160
+ <li><a href="./ActiveRecord.html">ActiveRecord</a></li>
161
+
162
+ <li><a href="./ActiveRecord/Base.html">ActiveRecord::Base</a></li>
163
+
164
+ <li><a href="./Mongrel.html">Mongrel</a></li>
165
+
166
+ <li><a href="./Mongrel/HttpServer.html">Mongrel::HttpServer</a></li>
167
+
168
+ <li><a href="./Spawn.html">Spawn</a></li>
169
+
170
+ <li><a href="./Spawn/SpawnId.html">Spawn::SpawnId</a></li>
171
+
172
+ <li><a href="./CreateJobs.html">CreateJobs</a></li>
173
+
174
+ </ul>
175
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
176
+ </div>
177
+
178
+
179
+ </div>
180
+ </div>
181
+
182
+ <div id="documentation">
183
+ <h1 class="module">Spawn</h1>
184
+
185
+ <div id="description">
186
+
187
+ </div>
188
+
189
+ <!-- Constants -->
190
+
191
+ <div id="constants-list" class="section">
192
+ <h3 class="section-header">Constants</h3>
193
+ <dl>
194
+
195
+ <dt><a name="RAILS_1_x">RAILS_1_x</a></dt>
196
+
197
+ <dd class="description"></dd>
198
+
199
+
200
+ <dt><a name="RAILS_2_2">RAILS_2_2</a></dt>
201
+
202
+ <dd class="description"></dd>
203
+
204
+
205
+ </dl>
206
+ </div>
207
+
208
+
209
+ <!-- Attributes -->
210
+
211
+
212
+ <!-- Methods -->
213
+
214
+ <div id="public-class-method-details" class="method-section section">
215
+ <h3 class="section-header">Public Class Methods</h3>
216
+
217
+
218
+ <div id="alive--method" class="method-detail ">
219
+ <a name="method-c-alive%3F"></a>
220
+
221
+ <div class="method-heading">
222
+
223
+ <span class="method-name">alive?</span><span
224
+ class="method-args">(pid)</span>
225
+ <span class="method-click-advice">click to toggle source</span>
226
+
227
+ </div>
228
+
229
+ <div class="method-description">
230
+
231
+
232
+
233
+
234
+
235
+ <div class="method-source-code"
236
+ id="alive--source">
237
+ <pre>
238
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 62</span>
239
+ 62: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">alive?</span>(<span class="ruby-identifier">pid</span>)
240
+ 63: <span class="ruby-keyword kw">begin</span>
241
+ 64: <span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-identifier">kill</span> <span class="ruby-value">0</span>, <span class="ruby-identifier">pid</span>
242
+ 65: <span class="ruby-comment cmt"># if the process is alive then kill won't throw an exception</span>
243
+ 66: <span class="ruby-keyword kw">true</span>
244
+ 67: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ESRCH</span>
245
+ 68: <span class="ruby-keyword kw">false</span>
246
+ 69: <span class="ruby-keyword kw">end</span>
247
+ 70: <span class="ruby-keyword kw">end</span></pre>
248
+ </div>
249
+
250
+ </div>
251
+
252
+
253
+
254
+
255
+ </div>
256
+
257
+
258
+ <div id="close-resources-method" class="method-detail ">
259
+ <a name="method-c-close_resources"></a>
260
+
261
+ <div class="method-heading">
262
+
263
+ <span class="method-name">close_resources</span><span
264
+ class="method-args">()</span>
265
+ <span class="method-click-advice">click to toggle source</span>
266
+
267
+ </div>
268
+
269
+ <div class="method-description">
270
+
271
+ <p>
272
+ close all the resources added by calls to resource_to_close
273
+ </p>
274
+
275
+
276
+
277
+ <div class="method-source-code"
278
+ id="close-resources-source">
279
+ <pre>
280
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 54</span>
281
+ 54: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">close_resources</span>
282
+ 55: <span class="ruby-identifier">@@resources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
283
+ 56: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:close</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">resource</span>.<span class="ruby-identifier">closed?</span>
284
+ 57: <span class="ruby-keyword kw">end</span>
285
+ 58: <span class="ruby-comment cmt"># in case somebody spawns recursively</span>
286
+ 59: <span class="ruby-identifier">@@resources</span>.<span class="ruby-identifier">clear</span>
287
+ 60: <span class="ruby-keyword kw">end</span></pre>
288
+ </div>
289
+
290
+ </div>
291
+
292
+
293
+
294
+
295
+ </div>
296
+
297
+
298
+ <div id="default-options-method" class="method-detail ">
299
+ <a name="method-c-default_options"></a>
300
+
301
+ <div class="method-heading">
302
+
303
+ <span class="method-name">default_options</span><span
304
+ class="method-args">(options = {})</span>
305
+ <span class="method-click-advice">click to toggle source</span>
306
+
307
+ </div>
308
+
309
+ <div class="method-description">
310
+
311
+ <p>
312
+ Set the options to use every time spawn is called unless specified
313
+ otherwise. For example, in your environment, do something like this:
314
+ </p>
315
+ <pre>
316
+ Spawn::default_options = {:nice =&gt; 5}
317
+ </pre>
318
+ <p>
319
+ to default to using the :nice option with a value of 5 on every call. Valid
320
+ options are:
321
+ </p>
322
+ <pre>
323
+ :method =&gt; (:thread | :fork | :yield)
324
+ :nice =&gt; nice value of the forked process
325
+ :kill =&gt; whether or not the parent process will kill the
326
+ spawned child process when the parent exits
327
+ :argv =&gt; changes name of the spawned process as seen in ps</pre>
328
+
329
+
330
+
331
+ <div class="method-source-code"
332
+ id="default-options-source">
333
+ <pre>
334
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 31</span>
335
+ 31: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">default_options</span>(<span class="ruby-identifier">options</span> = {})
336
+ 32: <span class="ruby-identifier">@@default_options</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">options</span>)
337
+ 33: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;spawn&gt; default options = #{options.inspect}&quot;</span>
338
+ 34: <span class="ruby-keyword kw">end</span></pre>
339
+ </div>
340
+
341
+ </div>
342
+
343
+
344
+
345
+
346
+ </div>
347
+
348
+
349
+ <div id="kill-punks-method" class="method-detail ">
350
+ <a name="method-c-kill_punks"></a>
351
+
352
+ <div class="method-heading">
353
+
354
+ <span class="method-name">kill_punks</span><span
355
+ class="method-args">()</span>
356
+ <span class="method-click-advice">click to toggle source</span>
357
+
358
+ </div>
359
+
360
+ <div class="method-description">
361
+
362
+
363
+
364
+
365
+
366
+ <div class="method-source-code"
367
+ id="kill-punks-source">
368
+ <pre>
369
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 72</span>
370
+ 72: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">kill_punks</span>
371
+ 73: <span class="ruby-identifier">@@punks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">punk</span><span class="ruby-operator">|</span>
372
+ 74: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">alive?</span>(<span class="ruby-identifier">punk</span>)
373
+ 75: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;spawn&gt; parent(#{Process.pid}) killing child(#{punk})&quot;</span>
374
+ 76: <span class="ruby-keyword kw">begin</span>
375
+ 77: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">kill</span>(<span class="ruby-value str">&quot;TERM&quot;</span>, <span class="ruby-identifier">punk</span>)
376
+ 78: <span class="ruby-keyword kw">rescue</span>
377
+ 79: <span class="ruby-keyword kw">end</span>
378
+ 80: <span class="ruby-keyword kw">end</span>
379
+ 81: <span class="ruby-keyword kw">end</span>
380
+ 82: <span class="ruby-identifier">@@punks</span> = []
381
+ 83: <span class="ruby-keyword kw">end</span></pre>
382
+ </div>
383
+
384
+ </div>
385
+
386
+
387
+
388
+
389
+ </div>
390
+
391
+
392
+ <div id="method-method" class="method-detail ">
393
+ <a name="method-c-method"></a>
394
+
395
+ <div class="method-heading">
396
+
397
+ <span class="method-name">method</span><span
398
+ class="method-args">(method, env = nil)</span>
399
+ <span class="method-click-advice">click to toggle source</span>
400
+
401
+ </div>
402
+
403
+ <div class="method-description">
404
+
405
+ <p>
406
+ @deprecated - please use <a
407
+ href="Spawn.html#method-c-default_options">Spawn::default_options</a>(:method
408
+ => ) instead add calls to this in your environment.rb to set your
409
+ configuration, for example, to use forking everywhere except your
410
+ &#8216;development&#8217; environment:
411
+ </p>
412
+ <pre>
413
+ Spawn::method :fork
414
+ Spawn::method :thread, 'development'</pre>
415
+
416
+
417
+
418
+ <div class="method-source-code"
419
+ id="method-source">
420
+ <pre>
421
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 41</span>
422
+ 41: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">method</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">env</span> = <span class="ruby-keyword kw">nil</span>)
423
+ 42: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;spawn&gt; please use Spawn::default_options(:method =&gt; #{method}) instead of Spawn::method&quot;</span>
424
+ 43: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">env</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">env</span> <span class="ruby-operator">==</span> <span class="ruby-constant">RAILS_ENV</span>
425
+ 44: <span class="ruby-identifier">default_options</span> <span class="ruby-value">:method</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">method</span>
426
+ 45: <span class="ruby-keyword kw">end</span>
427
+ 46: <span class="ruby-keyword kw">end</span></pre>
428
+ </div>
429
+
430
+ </div>
431
+
432
+
433
+
434
+
435
+ </div>
436
+
437
+
438
+ <div id="resources-to-close-method" class="method-detail ">
439
+ <a name="method-c-resources_to_close"></a>
440
+
441
+ <div class="method-heading">
442
+
443
+ <span class="method-name">resources_to_close</span><span
444
+ class="method-args">(*resources)</span>
445
+ <span class="method-click-advice">click to toggle source</span>
446
+
447
+ </div>
448
+
449
+ <div class="method-description">
450
+
451
+ <p>
452
+ set the resources to disconnect from in the child process (when forking)
453
+ </p>
454
+
455
+
456
+
457
+ <div class="method-source-code"
458
+ id="resources-to-close-source">
459
+ <pre>
460
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 49</span>
461
+ 49: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">resources_to_close</span>(*<span class="ruby-identifier">resources</span>)
462
+ 50: <span class="ruby-identifier">@@resources</span> = <span class="ruby-identifier">resources</span>
463
+ 51: <span class="ruby-keyword kw">end</span></pre>
464
+ </div>
465
+
466
+ </div>
467
+
468
+
469
+
470
+
471
+ </div>
472
+
473
+
474
+ </div>
475
+
476
+ <div id="public-instance-method-details" class="method-section section">
477
+ <h3 class="section-header">Public Instance Methods</h3>
478
+
479
+
480
+ <div id="spawn-method" class="method-detail ">
481
+ <a name="method-i-spawn"></a>
482
+
483
+ <div class="method-heading">
484
+
485
+ <span class="method-name">spawn</span><span
486
+ class="method-args">(opts = {})</span>
487
+ <span class="method-click-advice">click to toggle source</span>
488
+
489
+ </div>
490
+
491
+ <div class="method-description">
492
+
493
+ <p>
494
+ Spawns a long-running section of code and returns the ID of the spawned
495
+ process. By default the process will be a forked process. To use
496
+ threading, pass :method => :thread or override the default behavior in the
497
+ environment by setting &#8216;<a
498
+ href="Spawn.html#method-c-method">Spawn::method</a> :thread&#8217;.
499
+ </p>
500
+
501
+
502
+
503
+ <div class="method-source-code"
504
+ id="spawn-source">
505
+ <pre>
506
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 91</span>
507
+ 91: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">spawn</span>(<span class="ruby-identifier">opts</span> = {})
508
+ 92: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">@@default_options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">opts</span>.<span class="ruby-identifier">symbolize_keys</span>)
509
+ 93: <span class="ruby-comment cmt"># setting options[:method] will override configured value in default_options[:method]</span>
510
+ 94: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:method</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:yield</span>
511
+ 95: <span class="ruby-keyword kw">yield</span>
512
+ 96: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:method</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:thread</span>
513
+ 97: <span class="ruby-comment cmt"># for versions before 2.2, check for allow_concurrency</span>
514
+ 98: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RAILS_2_2</span> <span class="ruby-operator">||</span> <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">allow_concurrency</span>
515
+ 99: <span class="ruby-identifier">thread_it</span>(<span class="ruby-identifier">options</span>) { <span class="ruby-keyword kw">yield</span> }
516
+ 100: <span class="ruby-keyword kw">else</span>
517
+ 101: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;spawn(:method=&gt;:thread) only allowed when allow_concurrency=true&quot;</span>)
518
+ 102: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;spawn requires config.active_record.allow_concurrency=true when used with :method=&gt;:thread&quot;</span>
519
+ 103: <span class="ruby-keyword kw">end</span>
520
+ 104: <span class="ruby-keyword kw">else</span>
521
+ 105: <span class="ruby-identifier">fork_it</span>(<span class="ruby-identifier">options</span>) { <span class="ruby-keyword kw">yield</span> }
522
+ 106: <span class="ruby-keyword kw">end</span>
523
+ 107: <span class="ruby-keyword kw">end</span></pre>
524
+ </div>
525
+
526
+ </div>
527
+
528
+
529
+
530
+
531
+ </div>
532
+
533
+
534
+ <div id="wait-method" class="method-detail ">
535
+ <a name="method-i-wait"></a>
536
+
537
+ <div class="method-heading">
538
+
539
+ <span class="method-name">wait</span><span
540
+ class="method-args">(sids = [])</span>
541
+ <span class="method-click-advice">click to toggle source</span>
542
+
543
+ </div>
544
+
545
+ <div class="method-description">
546
+
547
+
548
+
549
+
550
+
551
+ <div class="method-source-code"
552
+ id="wait-source">
553
+ <pre>
554
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 109</span>
555
+ 109: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">sids</span> = [])
556
+ 110: <span class="ruby-comment cmt"># wait for all threads and/or forks (if a single sid passed in, convert to array first)</span>
557
+ 111: <span class="ruby-constant">Array</span>(<span class="ruby-identifier">sids</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sid</span><span class="ruby-operator">|</span>
558
+ 112: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sid</span>.<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:thread</span>
559
+ 113: <span class="ruby-identifier">sid</span>.<span class="ruby-identifier">handle</span>.<span class="ruby-identifier">join</span>()
560
+ 114: <span class="ruby-keyword kw">else</span>
561
+ 115: <span class="ruby-keyword kw">begin</span>
562
+ 116: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">wait</span>(<span class="ruby-identifier">sid</span>.<span class="ruby-identifier">handle</span>)
563
+ 117: <span class="ruby-keyword kw">rescue</span>
564
+ 118: <span class="ruby-comment cmt"># if the process is already done, ignore the error</span>
565
+ 119: <span class="ruby-keyword kw">end</span>
566
+ 120: <span class="ruby-keyword kw">end</span>
567
+ 121: <span class="ruby-keyword kw">end</span>
568
+ 122: <span class="ruby-comment cmt"># clean up connections from expired threads</span>
569
+ 123: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">verify_active_connections!</span>()
570
+ 124: <span class="ruby-keyword kw">end</span></pre>
571
+ </div>
572
+
573
+ </div>
574
+
575
+
576
+
577
+
578
+ </div>
579
+
580
+
581
+ </div>
582
+
583
+ <div id="protected-instance-method-details" class="method-section section">
584
+ <h3 class="section-header">Protected Instance Methods</h3>
585
+
586
+
587
+ <div id="fork-it-method" class="method-detail ">
588
+ <a name="method-i-fork_it"></a>
589
+
590
+ <div class="method-heading">
591
+
592
+ <span class="method-name">fork_it</span><span
593
+ class="method-args">(options)</span>
594
+ <span class="method-click-advice">click to toggle source</span>
595
+
596
+ </div>
597
+
598
+ <div class="method-description">
599
+
600
+
601
+
602
+
603
+
604
+ <div class="method-source-code"
605
+ id="fork-it-source">
606
+ <pre>
607
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 136</span>
608
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fork_it</span>(<span class="ruby-identifier">options</span>)
609
+ 137: <span class="ruby-comment cmt"># The problem with rails is that it only has one connection (per class),</span>
610
+ 138: <span class="ruby-comment cmt"># so when we fork a new process, we need to reconnect.</span>
611
+ 139: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;spawn&gt; parent PID = #{Process.pid}&quot;</span>
612
+ 140: <span class="ruby-identifier">child</span> = <span class="ruby-identifier">fork</span> <span class="ruby-keyword kw">do</span>
613
+ 141: <span class="ruby-keyword kw">begin</span>
614
+ 142: <span class="ruby-identifier">start</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
615
+ 143: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;spawn&gt; child PID = #{Process.pid}&quot;</span>
616
+ 144:
617
+ 145: <span class="ruby-comment cmt"># this child has no children of it's own to kill (yet)</span>
618
+ 146: <span class="ruby-identifier">@@punks</span> = []
619
+ 147:
620
+ 148: <span class="ruby-comment cmt"># set the nice priority if needed</span>
621
+ 149: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setpriority</span>(<span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-constant">PRIO_PROCESS</span>, <span class="ruby-value">0</span>, <span class="ruby-identifier">options</span>[<span class="ruby-value">:nice</span>]) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:nice</span>]
622
+ 150:
623
+ 151: <span class="ruby-comment cmt"># disconnect from the listening socket, et al</span>
624
+ 152: <span class="ruby-constant">Spawn</span>.<span class="ruby-identifier">close_resources</span>
625
+ 153: <span class="ruby-comment cmt"># get a new connection so the parent can keep the original one</span>
626
+ 154: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">spawn_reconnect</span>
627
+ 155:
628
+ 156: <span class="ruby-comment cmt"># set the process name</span>
629
+ 157: <span class="ruby-identifier">$0</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:argv</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:argv</span>]
630
+ 158:
631
+ 159: <span class="ruby-comment cmt"># run the block of code that takes so long</span>
632
+ 160: <span class="ruby-keyword kw">yield</span>
633
+ 161:
634
+ 162: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ex</span>
635
+ 163: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;spawn&gt; Exception in child[#{Process.pid}] - #{ex.class}: #{ex.message}&quot;</span>
636
+ 164: <span class="ruby-keyword kw">ensure</span>
637
+ 165: <span class="ruby-keyword kw">begin</span>
638
+ 166: <span class="ruby-comment cmt"># to be safe, catch errors on closing the connnections too</span>
639
+ 167: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RAILS_2_2</span>
640
+ 168: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">connection_handler</span>.<span class="ruby-identifier">clear_all_connections!</span>
641
+ 169: <span class="ruby-keyword kw">else</span>
642
+ 170: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">connection</span>.<span class="ruby-identifier">disconnect!</span>
643
+ 171: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">remove_connection</span>
644
+ 172: <span class="ruby-keyword kw">end</span>
645
+ 173: <span class="ruby-keyword kw">ensure</span>
646
+ 174: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;spawn&gt; child[#{Process.pid}] took #{Time.now - start} sec&quot;</span>
647
+ 175: <span class="ruby-comment cmt"># ensure log is flushed since we are using exit!</span>
648
+ 176: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">flush</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:flush</span>)
649
+ 177: <span class="ruby-comment cmt"># this child might also have children to kill if it called spawn</span>
650
+ 178: <span class="ruby-constant">Spawn</span><span class="ruby-operator">::</span><span class="ruby-identifier">kill_punks</span>
651
+ 179: <span class="ruby-comment cmt"># this form of exit doesn't call at_exit handlers</span>
652
+ 180: <span class="ruby-identifier">exit!</span>(<span class="ruby-value">0</span>)
653
+ 181: <span class="ruby-keyword kw">end</span>
654
+ 182: <span class="ruby-keyword kw">end</span>
655
+ 183: <span class="ruby-keyword kw">end</span>
656
+ 184:
657
+ 185: <span class="ruby-comment cmt"># detach from child process (parent may still wait for detached process if they wish)</span>
658
+ 186: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">detach</span>(<span class="ruby-identifier">child</span>)
659
+ 187:
660
+ 188: <span class="ruby-comment cmt"># remove dead children from the target list to avoid memory leaks</span>
661
+ 189: <span class="ruby-identifier">@@punks</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">punk</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-constant">Spawn</span><span class="ruby-operator">::</span><span class="ruby-identifier">alive?</span>(<span class="ruby-identifier">punk</span>)}
662
+ 190:
663
+ 191: <span class="ruby-comment cmt"># mark this child for death when this process dies</span>
664
+ 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:kill</span>]
665
+ 193: <span class="ruby-identifier">@@punks</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">child</span>
666
+ 194: <span class="ruby-identifier">@@logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;spawn&gt; death row = #{@@punks.inspect}&quot;</span>
667
+ 195: <span class="ruby-keyword kw">end</span>
668
+ 196:
669
+ 197: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">SpawnId</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:fork</span>, <span class="ruby-identifier">child</span>)
670
+ 198: <span class="ruby-keyword kw">end</span></pre>
671
+ </div>
672
+
673
+ </div>
674
+
675
+
676
+
677
+
678
+ </div>
679
+
680
+
681
+ <div id="thread-it-method" class="method-detail ">
682
+ <a name="method-i-thread_it"></a>
683
+
684
+ <div class="method-heading">
685
+
686
+ <span class="method-name">thread_it</span><span
687
+ class="method-args">(options)</span>
688
+ <span class="method-click-advice">click to toggle source</span>
689
+
690
+ </div>
691
+
692
+ <div class="method-description">
693
+
694
+
695
+
696
+
697
+
698
+ <div class="method-source-code"
699
+ id="thread-it-source">
700
+ <pre>
701
+ <span class="ruby-comment cmt"># File vendor/spawn/lib/spawn.rb, line 200</span>
702
+ 200: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">thread_it</span>(<span class="ruby-identifier">options</span>)
703
+ 201: <span class="ruby-comment cmt"># clean up stale connections from previous threads</span>
704
+ 202: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">verify_active_connections!</span>()
705
+ 203: <span class="ruby-identifier">thr</span> = <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
706
+ 204: <span class="ruby-comment cmt"># run the long-running code block</span>
707
+ 205: <span class="ruby-keyword kw">yield</span>
708
+ 206: <span class="ruby-keyword kw">end</span>
709
+ 207: <span class="ruby-identifier">thr</span>.<span class="ruby-identifier">priority</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">options</span>[<span class="ruby-value">:nice</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:nice</span>]
710
+ 208: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">SpawnId</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:thread</span>, <span class="ruby-identifier">thr</span>)
711
+ 209: <span class="ruby-keyword kw">end</span></pre>
712
+ </div>
713
+
714
+ </div>
715
+
716
+
717
+
718
+
719
+ </div>
720
+
721
+
722
+ </div>
723
+
724
+
725
+ </div>
726
+
727
+
728
+ <div id="rdoc-debugging-section-dump" class="debugging-section">
729
+
730
+ <p>Disabled; run with --debug to generate this.</p>
731
+
732
+ </div>
733
+
734
+ <div id="validator-badges">
735
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
736
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
737
+ Rdoc Generator</a> 1.1.6</small>.</p>
738
+ </div>
739
+
740
+ </body>
741
+ </html>
742
+