job_boss 0.5.0 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/README.markdown +39 -7
  2. data/bin/job_boss +4 -2
  3. data/doc/ActiveSupport/TestCase.html +106 -87
  4. data/doc/ActiveSupport.html +6 -0
  5. data/doc/CreateJobs.html +17 -5
  6. data/doc/DaemonTest.html +6 -0
  7. data/doc/Gemfile.html +128 -0
  8. data/doc/JobBoss/Boss.html +193 -144
  9. data/doc/JobBoss/Config.html +8 -2
  10. data/doc/JobBoss/Job.html +224 -166
  11. data/doc/JobBoss/Queuer.html +25 -11
  12. data/doc/JobBoss.html +9 -0
  13. data/doc/MIT-LICENSE.html +137 -0
  14. data/doc/MathJobs.html +6 -0
  15. data/doc/Penguin.html +223 -0
  16. data/doc/Rakefile.html +6 -0
  17. data/doc/SleepJobs.html +6 -0
  18. data/doc/StringJobs.html +7 -1
  19. data/doc/bin/job_boss.html +3 -1
  20. data/doc/created.rid +17 -11
  21. data/doc/images/brick.png +0 -0
  22. data/doc/images/brick_link.png +0 -0
  23. data/doc/images/bug.png +0 -0
  24. data/doc/images/bullet_black.png +0 -0
  25. data/doc/images/bullet_toggle_minus.png +0 -0
  26. data/doc/images/bullet_toggle_plus.png +0 -0
  27. data/doc/images/date.png +0 -0
  28. data/doc/images/find.png +0 -0
  29. data/doc/images/loadingAnimation.gif +0 -0
  30. data/doc/images/macFFBgHack.png +0 -0
  31. data/doc/images/package.png +0 -0
  32. data/doc/images/page_green.png +0 -0
  33. data/doc/images/page_white_text.png +0 -0
  34. data/doc/images/page_white_width.png +0 -0
  35. data/doc/images/plugin.png +0 -0
  36. data/doc/images/ruby.png +0 -0
  37. data/doc/images/tag_green.png +0 -0
  38. data/doc/images/wrench.png +0 -0
  39. data/doc/images/wrench_orange.png +0 -0
  40. data/doc/images/zoom.png +0 -0
  41. data/doc/index.html +12 -0
  42. data/doc/init_rb.html +54 -0
  43. data/doc/js/darkfish.js +116 -0
  44. data/doc/js/jquery.js +32 -0
  45. data/doc/js/quicksearch.js +114 -0
  46. data/doc/js/thickbox-compressed.js +10 -0
  47. data/doc/lib/job_boss/boss_rb.html +1 -1
  48. data/doc/lib/job_boss/config_rb.html +1 -1
  49. data/doc/lib/job_boss/job_rb.html +1 -1
  50. data/doc/lib/job_boss/queuer_rb.html +1 -1
  51. data/doc/lib/job_boss_rb.html +56 -0
  52. data/doc/lib/migrate_rb.html +1 -1
  53. data/doc/test/app_root/app/jobs/string_jobs_rb.html +1 -1
  54. data/doc/test/app_root/app/models/penguin_rb.html +52 -0
  55. data/doc/test/app_root/config/environment_rb.html +56 -0
  56. data/doc/test/test_helper_rb.html +3 -1
  57. data/doc/test/unit/job_test_rb.html +2 -4
  58. data/job_boss.gemspec +1 -1
  59. data/lib/job_boss/config.rb +2 -2
  60. data/lib/job_boss/job.rb +22 -2
  61. data/lib/job_boss/queuer.rb +10 -2
  62. data/lib/migrate.rb +6 -0
  63. data/test/app_root/app/models/penguin.rb +9 -0
  64. data/test/app_root/config/database.yml +3 -3
  65. data/test/app_root/config/environment.rb +3 -0
  66. data/test/test_helper.rb +6 -4
  67. data/test/unit/job_test.rb +33 -17
  68. metadata +38 -9
@@ -77,6 +77,8 @@
77
77
 
78
78
  <li><a href="#method-c-queue">::queue</a></li>
79
79
 
80
+ <li><a href="#method-c-queue_path">::queue_path</a></li>
81
+
80
82
  <li><a href="#method-c-resolve_path">::resolve_path</a></li>
81
83
 
82
84
  <li><a href="#method-i-available_employees">#available_employees</a></li>
@@ -112,6 +114,10 @@
112
114
  <h3 class="section-header">Files</h3>
113
115
  <ul>
114
116
 
117
+ <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
118
+
119
+ <li class="file"><a href="../MIT-LICENSE.html">MIT-LICENSE</a></li>
120
+
115
121
  <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
116
122
 
117
123
  </ul>
@@ -153,6 +159,8 @@
153
159
 
154
160
  <li><a href="../MathJobs.html">MathJobs</a></li>
155
161
 
162
+ <li><a href="../Penguin.html">Penguin</a></li>
163
+
156
164
  <li><a href="../SleepJobs.html">SleepJobs</a></li>
157
165
 
158
166
  <li><a href="../StringJobs.html">StringJobs</a></li>
@@ -243,13 +251,13 @@ Used to set <a href="Boss.html">Boss</a> configuration Usage:
243
251
  <div class="method-source-code"
244
252
  id="logger-source">
245
253
  <pre>
246
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 23</span>
247
- 23: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">logger</span>
248
- 24: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">log_path</span> = <span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">log_path</span>)
249
- 25:
250
- 26: <span class="ruby-identifier">require</span> <span class="ruby-value str">'logger'</span>
251
- 27: <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">log_path</span>)
252
- 28: <span class="ruby-keyword kw">end</span></pre>
254
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 32</span>
255
+ 32: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">logger</span>
256
+ 33: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">log_path</span> = <span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">log_path</span>)
257
+ 34:
258
+ 35: <span class="ruby-identifier">require</span> <span class="ruby-value str">'logger'</span>
259
+ 36: <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">log_path</span>)
260
+ 37: <span class="ruby-keyword kw">end</span></pre>
253
261
  </div>
254
262
 
255
263
  </div>
@@ -280,16 +288,16 @@ Used to set <a href="Boss.html">Boss</a> configuration Usage:
280
288
  <div class="method-source-code"
281
289
  id="new-source">
282
290
  <pre>
283
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 41</span>
284
- 41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span> = {})
285
- 42: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">application_root</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:working_dir</span>]
286
- 43: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">sleep_interval</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:sleep_interval</span>]
287
- 44: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">employee_limit</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:employee_limit</span>]
288
- 45: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:database_yaml_path</span>]
289
- 46: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:jobs_path</span>]
290
- 47:
291
- 48: <span class="ruby-ivar">@running_jobs</span> = []
292
- 49: <span class="ruby-keyword kw">end</span></pre>
291
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 50</span>
292
+ 50: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span> = {})
293
+ 51: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">application_root</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:working_dir</span>]
294
+ 52: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">sleep_interval</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:sleep_interval</span>]
295
+ 53: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">employee_limit</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:employee_limit</span>]
296
+ 54: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:database_yaml_path</span>]
297
+ 55: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:jobs_path</span>]
298
+ 56:
299
+ 57: <span class="ruby-ivar">@running_jobs</span> = []
300
+ 58: <span class="ruby-keyword kw">end</span></pre>
293
301
  </div>
294
302
 
295
303
  </div>
@@ -336,6 +344,46 @@ Used to queue jobs Usage:
336
344
 
337
345
 
338
346
 
347
+ </div>
348
+
349
+
350
+ <div id="queue-path-method" class="method-detail ">
351
+ <a name="method-c-queue_path"></a>
352
+
353
+ <div class="method-heading">
354
+
355
+ <span class="method-name">queue_path</span><span
356
+ class="method-args">(path, *args)</span>
357
+ <span class="method-click-advice">click to toggle source</span>
358
+
359
+ </div>
360
+
361
+ <div class="method-description">
362
+
363
+ <p>
364
+ Used to queue jobs Usage:
365
+ </p>
366
+ <pre>
367
+ Boss.queue_path('math#in_prime?', 42)</pre>
368
+
369
+
370
+
371
+ <div class="method-source-code"
372
+ id="queue-path-source">
373
+ <pre>
374
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 26</span>
375
+ 26: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">queue_path</span>(<span class="ruby-identifier">path</span>, *<span class="ruby-identifier">args</span>)
376
+ 27: <span class="ruby-identifier">controller</span>, <span class="ruby-identifier">action</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">'#'</span>)
377
+ 28:
378
+ 29: <span class="ruby-identifier">queue</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">controller</span>).<span class="ruby-identifier">send</span>(<span class="ruby-identifier">action</span>, *<span class="ruby-identifier">args</span>)
379
+ 30: <span class="ruby-keyword kw">end</span></pre>
380
+ </div>
381
+
382
+ </div>
383
+
384
+
385
+
386
+
339
387
  </div>
340
388
 
341
389
 
@@ -362,14 +410,14 @@ application_root
362
410
  <div class="method-source-code"
363
411
  id="resolve-path-source">
364
412
  <pre>
365
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 32</span>
366
- 32: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">path</span>)
367
- 33: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">==</span> <span class="ruby-value">//</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">match</span>(<span class="ruby-node">/^#{@@config.application_root}/</span>)
368
- 34: <span class="ruby-identifier">path</span>
369
- 35: <span class="ruby-keyword kw">else</span>
370
- 36: <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">application_root</span>, <span class="ruby-identifier">path</span>)
371
- 37: <span class="ruby-keyword kw">end</span>
372
- 38: <span class="ruby-keyword kw">end</span></pre>
413
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 41</span>
414
+ 41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">path</span>)
415
+ 42: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">==</span> <span class="ruby-value">//</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">match</span>(<span class="ruby-node">/^#{@@config.application_root}/</span>)
416
+ 43: <span class="ruby-identifier">path</span>
417
+ 44: <span class="ruby-keyword kw">else</span>
418
+ 45: <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">application_root</span>, <span class="ruby-identifier">path</span>)
419
+ 46: <span class="ruby-keyword kw">end</span>
420
+ 47: <span class="ruby-keyword kw">end</span></pre>
373
421
  </div>
374
422
 
375
423
  </div>
@@ -408,50 +456,50 @@ Start the boss
408
456
  <div class="method-source-code"
409
457
  id="start-source">
410
458
  <pre>
411
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 52</span>
412
- 52: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
413
- 53: <span class="ruby-identifier">require</span> <span class="ruby-value str">'active_record'</span>
414
- 54: <span class="ruby-identifier">require</span> <span class="ruby-value str">'yaml'</span>
415
- 55:
416
- 56: <span class="ruby-identifier">establish_active_record_connection</span>
417
- 57:
418
- 58: <span class="ruby-identifier">require_job_classes</span>
419
- 59:
420
- 60: <span class="ruby-identifier">require</span> <span class="ruby-value str">'job_boss/job'</span>
421
- 61:
422
- 62: <span class="ruby-identifier">migrate</span>
423
- 63:
424
- 64: <span class="ruby-constant">Signal</span>.<span class="ruby-identifier">trap</span>(<span class="ruby-value str">&quot;HUP&quot;</span>) <span class="ruby-keyword kw">do</span>
425
- 65: <span class="ruby-identifier">stop</span>
426
- 66: <span class="ruby-keyword kw">end</span>
427
- 67:
428
- 68: <span class="ruby-identifier">at_exit</span> <span class="ruby-keyword kw">do</span>
429
- 69: <span class="ruby-identifier">stop</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span> <span class="ruby-operator">==</span> <span class="ruby-constant">BOSS_PID</span>
430
- 70: <span class="ruby-keyword kw">end</span>
431
- 71:
432
- 72: <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">&quot;Job Boss started&quot;</span>
433
- 73:
434
- 74: <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
435
- 75: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">children_count</span> = <span class="ruby-identifier">available_employees</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">Job</span>.<span class="ruby-identifier">pending</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
436
- 76: <span class="ruby-identifier">sleep</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">sleep_interval</span>)
437
- 77: <span class="ruby-keyword kw">next</span>
438
- 78: <span class="ruby-keyword kw">end</span>
439
- 79:
440
- 80: <span class="ruby-comment cmt"># Go through each pending path so that we don't get stuck just processing</span>
441
- 81: <span class="ruby-comment cmt"># long running jobs which would leave quicker jobs to suffocate</span>
442
- 82: <span class="ruby-constant">Job</span>.<span class="ruby-identifier">pending_paths</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>
443
- 83: <span class="ruby-identifier">job</span> = <span class="ruby-constant">Job</span>.<span class="ruby-identifier">pending</span>.<span class="ruby-identifier">find_by_path</span>(<span class="ruby-identifier">path</span>)
444
- 84: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">job</span>.<span class="ruby-identifier">nil?</span>
445
- 85:
446
- 86: <span class="ruby-identifier">job</span>.<span class="ruby-identifier">dispatch</span>
447
- 87: <span class="ruby-ivar">@running_jobs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">job</span>
448
- 88:
449
- 89: <span class="ruby-identifier">children_count</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
450
- 90: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">children_count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
451
- 91: <span class="ruby-keyword kw">end</span>
452
- 92:
453
- 93: <span class="ruby-keyword kw">end</span>
454
- 94: <span class="ruby-keyword kw">end</span></pre>
459
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 61</span>
460
+ 61: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
461
+ 62: <span class="ruby-identifier">require</span> <span class="ruby-value str">'active_record'</span>
462
+ 63: <span class="ruby-identifier">require</span> <span class="ruby-value str">'yaml'</span>
463
+ 64:
464
+ 65: <span class="ruby-identifier">establish_active_record_connection</span>
465
+ 66:
466
+ 67: <span class="ruby-identifier">require_job_classes</span>
467
+ 68:
468
+ 69: <span class="ruby-identifier">require</span> <span class="ruby-value str">'job_boss/job'</span>
469
+ 70:
470
+ 71: <span class="ruby-identifier">migrate</span>
471
+ 72:
472
+ 73: <span class="ruby-constant">Signal</span>.<span class="ruby-identifier">trap</span>(<span class="ruby-value str">&quot;HUP&quot;</span>) <span class="ruby-keyword kw">do</span>
473
+ 74: <span class="ruby-identifier">stop</span>
474
+ 75: <span class="ruby-keyword kw">end</span>
475
+ 76:
476
+ 77: <span class="ruby-identifier">at_exit</span> <span class="ruby-keyword kw">do</span>
477
+ 78: <span class="ruby-identifier">stop</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span> <span class="ruby-operator">==</span> <span class="ruby-constant">BOSS_PID</span>
478
+ 79: <span class="ruby-keyword kw">end</span>
479
+ 80:
480
+ 81: <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">&quot;Job Boss started&quot;</span>
481
+ 82:
482
+ 83: <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
483
+ 84: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">children_count</span> = <span class="ruby-identifier">available_employees</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">Job</span>.<span class="ruby-identifier">pending</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
484
+ 85: <span class="ruby-identifier">sleep</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">sleep_interval</span>)
485
+ 86: <span class="ruby-keyword kw">next</span>
486
+ 87: <span class="ruby-keyword kw">end</span>
487
+ 88:
488
+ 89: <span class="ruby-comment cmt"># Go through each pending path so that we don't get stuck just processing</span>
489
+ 90: <span class="ruby-comment cmt"># long running jobs which would leave quicker jobs to suffocate</span>
490
+ 91: <span class="ruby-constant">Job</span>.<span class="ruby-identifier">pending_paths</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>
491
+ 92: <span class="ruby-identifier">job</span> = <span class="ruby-constant">Job</span>.<span class="ruby-identifier">pending</span>.<span class="ruby-identifier">find_by_path</span>(<span class="ruby-identifier">path</span>)
492
+ 93: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">job</span>.<span class="ruby-identifier">nil?</span>
493
+ 94:
494
+ 95: <span class="ruby-identifier">job</span>.<span class="ruby-identifier">dispatch</span>
495
+ 96: <span class="ruby-ivar">@running_jobs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">job</span>
496
+ 97:
497
+ 98: <span class="ruby-identifier">children_count</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
498
+ 99: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">children_count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
499
+ 100: <span class="ruby-keyword kw">end</span>
500
+ 101:
501
+ 102: <span class="ruby-keyword kw">end</span>
502
+ 103: <span class="ruby-keyword kw">end</span></pre>
455
503
  </div>
456
504
 
457
505
  </div>
@@ -482,14 +530,14 @@ Start the boss
482
530
  <div class="method-source-code"
483
531
  id="stop-source">
484
532
  <pre>
485
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 96</span>
486
- 96: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>
487
- 97: <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;Stopping #{@running_jobs.size} running employees...&quot;</span>
488
- 98:
489
- 99: <span class="ruby-identifier">shutdown_running_jobs</span>
490
- 100:
491
- 101: <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">&quot;Job Boss stopped&quot;</span>
492
- 102: <span class="ruby-keyword kw">end</span></pre>
533
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 105</span>
534
+ 105: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>
535
+ 106: <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;Stopping #{@running_jobs.size} running employees...&quot;</span>
536
+ 107:
537
+ 108: <span class="ruby-identifier">shutdown_running_jobs</span>
538
+ 109:
539
+ 110: <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">&quot;Job Boss stopped&quot;</span>
540
+ 111: <span class="ruby-keyword kw">end</span></pre>
493
541
  </div>
494
542
 
495
543
  </div>
@@ -528,12 +576,12 @@ Total number of employees which can be run
528
576
  <div class="method-source-code"
529
577
  id="available-employees-source">
530
578
  <pre>
531
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 127</span>
532
- 127: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">available_employees</span>
533
- 128: <span class="ruby-identifier">cleanup_running_jobs</span>
534
- 129:
535
- 130: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">employee_limit</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">size</span>
536
- 131: <span class="ruby-keyword kw">end</span></pre>
579
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 136</span>
580
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">available_employees</span>
581
+ 137: <span class="ruby-identifier">cleanup_running_jobs</span>
582
+ 138:
583
+ 139: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">employee_limit</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">size</span>
584
+ 140: <span class="ruby-keyword kw">end</span></pre>
537
585
  </div>
538
586
 
539
587
  </div>
@@ -567,25 +615,25 @@ which have been cancelled, or which went MIA
567
615
  <div class="method-source-code"
568
616
  id="cleanup-running-jobs-source">
569
617
  <pre>
570
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 107</span>
571
- 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cleanup_running_jobs</span>
572
- 108: <span class="ruby-constant">Job</span>.<span class="ruby-identifier">uncached</span> <span class="ruby-keyword kw">do</span>
573
- 109: <span class="ruby-ivar">@running_jobs</span> = <span class="ruby-constant">Job</span>.<span class="ruby-identifier">running</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value str">'id in (?)'</span>, <span class="ruby-ivar">@running_jobs</span>)
574
- 110:
575
- 111: <span class="ruby-identifier">cancelled_jobs</span> = <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">select</span>(&amp;<span class="ruby-value">:cancelled?</span>)
576
- 112: <span class="ruby-identifier">cancelled_jobs</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span> <span class="ruby-identifier">kill_job</span>(<span class="ruby-identifier">job</span>) }
577
- 113: <span class="ruby-ivar">@running_jobs</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">cancelled_jobs</span>
578
- 114:
579
- 115: <span class="ruby-comment cmt"># Clean out any jobs whos processes have stopped running for some reason</span>
580
- 116: <span class="ruby-ivar">@running_jobs</span> = <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">select</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span>
581
- 117: <span class="ruby-keyword kw">begin</span>
582
- 118: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">kill</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">job</span>.<span class="ruby-identifier">employee_pid</span>.<span class="ruby-identifier">to_i</span>)
583
- 119: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ESRCH</span>
584
- 120: <span class="ruby-keyword kw">nil</span>
585
- 121: <span class="ruby-keyword kw">end</span>
586
- 122: <span class="ruby-keyword kw">end</span>
587
- 123: <span class="ruby-keyword kw">end</span>
588
- 124: <span class="ruby-keyword kw">end</span></pre>
618
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 116</span>
619
+ 116: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cleanup_running_jobs</span>
620
+ 117: <span class="ruby-constant">Job</span>.<span class="ruby-identifier">uncached</span> <span class="ruby-keyword kw">do</span>
621
+ 118: <span class="ruby-ivar">@running_jobs</span> = <span class="ruby-constant">Job</span>.<span class="ruby-identifier">running</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value str">'id in (?)'</span>, <span class="ruby-ivar">@running_jobs</span>)
622
+ 119:
623
+ 120: <span class="ruby-identifier">cancelled_jobs</span> = <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">select</span>(&amp;<span class="ruby-value">:cancelled?</span>)
624
+ 121: <span class="ruby-identifier">cancelled_jobs</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span> <span class="ruby-identifier">kill_job</span>(<span class="ruby-identifier">job</span>) }
625
+ 122: <span class="ruby-ivar">@running_jobs</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">cancelled_jobs</span>
626
+ 123:
627
+ 124: <span class="ruby-comment cmt"># Clean out any jobs whos processes have stopped running for some reason</span>
628
+ 125: <span class="ruby-ivar">@running_jobs</span> = <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">select</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span>
629
+ 126: <span class="ruby-keyword kw">begin</span>
630
+ 127: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">kill</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">job</span>.<span class="ruby-identifier">employee_pid</span>.<span class="ruby-identifier">to_i</span>)
631
+ 128: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ESRCH</span>
632
+ 129: <span class="ruby-keyword kw">nil</span>
633
+ 130: <span class="ruby-keyword kw">end</span>
634
+ 131: <span class="ruby-keyword kw">end</span>
635
+ 132: <span class="ruby-keyword kw">end</span>
636
+ 133: <span class="ruby-keyword kw">end</span></pre>
589
637
  </div>
590
638
 
591
639
  </div>
@@ -616,16 +664,17 @@ which have been cancelled, or which went MIA
616
664
  <div class="method-source-code"
617
665
  id="establish-active-record-connection-source">
618
666
  <pre>
619
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 133</span>
620
- 133: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">establish_active_record_connection</span>
621
- 134: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span> = <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span>)
622
- 135:
623
- 136: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Database YAML file missing (#{@@config.database_yaml_path})&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span>)
624
- 137:
625
- 138: <span class="ruby-identifier">config</span> = <span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span>))
626
- 139:
627
- 140: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">establish_connection</span>(<span class="ruby-identifier">config</span>[<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">environment</span>])
628
- 141: <span class="ruby-keyword kw">end</span></pre>
667
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 142</span>
668
+ 142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">establish_active_record_connection</span>
669
+ 143: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span> = <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span>)
670
+ 144:
671
+ 145: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Database YAML file missing (#{@@config.database_yaml_path})&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span>)
672
+ 146:
673
+ 147: <span class="ruby-identifier">config</span> = <span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">database_yaml_path</span>))
674
+ 148:
675
+ 149: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">remove_connection</span>
676
+ 150: <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">establish_connection</span>(<span class="ruby-identifier">config</span>[<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">environment</span>])
677
+ 151: <span class="ruby-keyword kw">end</span></pre>
629
678
  </div>
630
679
 
631
680
  </div>
@@ -656,14 +705,14 @@ which have been cancelled, or which went MIA
656
705
  <div class="method-source-code"
657
706
  id="kill-job-source">
658
707
  <pre>
659
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 158</span>
660
- 158: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">kill_job</span>(<span class="ruby-identifier">job</span>)
661
- 159: <span class="ruby-keyword kw">begin</span>
662
- 160: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">kill</span>(<span class="ruby-value str">&quot;HUP&quot;</span>, <span class="ruby-identifier">job</span>.<span class="ruby-identifier">employee_pid</span>.<span class="ruby-identifier">to_i</span>)
663
- 161: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ESRCH</span>
664
- 162: <span class="ruby-keyword kw">nil</span>
665
- 163: <span class="ruby-keyword kw">end</span>
666
- 164: <span class="ruby-keyword kw">end</span></pre>
708
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 168</span>
709
+ 168: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">kill_job</span>(<span class="ruby-identifier">job</span>)
710
+ 169: <span class="ruby-keyword kw">begin</span>
711
+ 170: <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">job</span>.<span class="ruby-identifier">employee_pid</span>.<span class="ruby-identifier">to_i</span>)
712
+ 171: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ESRCH</span>
713
+ 172: <span class="ruby-keyword kw">nil</span>
714
+ 173: <span class="ruby-keyword kw">end</span>
715
+ 174: <span class="ruby-keyword kw">end</span></pre>
667
716
  </div>
668
717
 
669
718
  </div>
@@ -694,13 +743,13 @@ which have been cancelled, or which went MIA
694
743
  <div class="method-source-code"
695
744
  id="migrate-source">
696
745
  <pre>
697
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 151</span>
698
- 151: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">migrate</span>
699
- 152: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">Job</span>.<span class="ruby-identifier">table_exists?</span>
700
- 153: <span class="ruby-identifier">require</span> <span class="ruby-value str">'migrate'</span>
701
- 154: <span class="ruby-constant">CreateJobs</span>.<span class="ruby-identifier">up</span>
702
- 155: <span class="ruby-keyword kw">end</span>
703
- 156: <span class="ruby-keyword kw">end</span></pre>
746
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 161</span>
747
+ 161: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">migrate</span>
748
+ 162: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">Job</span>.<span class="ruby-identifier">table_exists?</span>
749
+ 163: <span class="ruby-identifier">require</span> <span class="ruby-value str">'migrate'</span>
750
+ 164: <span class="ruby-constant">CreateJobs</span>.<span class="ruby-identifier">up</span>
751
+ 165: <span class="ruby-keyword kw">end</span>
752
+ 166: <span class="ruby-keyword kw">end</span></pre>
704
753
  </div>
705
754
 
706
755
  </div>
@@ -731,14 +780,14 @@ which have been cancelled, or which went MIA
731
780
  <div class="method-source-code"
732
781
  id="require-job-classes-source">
733
782
  <pre>
734
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 143</span>
735
- 143: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">require_job_classes</span>
736
- 144: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span> = <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span>)
737
- 145:
738
- 146: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Jobs path missing (#{@@config.jobs_path})&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span>)
739
- 147:
740
- 148: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span>, <span class="ruby-value str">'*.rb'</span>)).<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">job_class</span><span class="ruby-operator">|</span> <span class="ruby-identifier">require</span> <span class="ruby-identifier">job_class</span> }
741
- 149: <span class="ruby-keyword kw">end</span></pre>
783
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 153</span>
784
+ 153: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">require_job_classes</span>
785
+ 154: <span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span> = <span class="ruby-constant">Boss</span>.<span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span>)
786
+ 155:
787
+ 156: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Jobs path missing (#{@@config.jobs_path})&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span>)
788
+ 157:
789
+ 158: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">@@config</span>.<span class="ruby-identifier">jobs_path</span>, <span class="ruby-value str">'*.rb'</span>)).<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">job_class</span><span class="ruby-operator">|</span> <span class="ruby-identifier">require</span> <span class="ruby-identifier">job_class</span> }
790
+ 159: <span class="ruby-keyword kw">end</span></pre>
742
791
  </div>
743
792
 
744
793
  </div>
@@ -769,15 +818,15 @@ which have been cancelled, or which went MIA
769
818
  <div class="method-source-code"
770
819
  id="shutdown-running-jobs-source">
771
820
  <pre>
772
- <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 166</span>
773
- 166: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shutdown_running_jobs</span>
774
- 167: <span class="ruby-identifier">cleanup_running_jobs</span>
775
- 168:
776
- 169: <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span>
777
- 170: <span class="ruby-identifier">kill_job</span>(<span class="ruby-identifier">job</span>)
778
- 171: <span class="ruby-identifier">job</span>.<span class="ruby-identifier">mark_for_redo</span>
779
- 172: <span class="ruby-keyword kw">end</span>
780
- 173: <span class="ruby-keyword kw">end</span></pre>
821
+ <span class="ruby-comment cmt"># File lib/job_boss/boss.rb, line 176</span>
822
+ 176: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shutdown_running_jobs</span>
823
+ 177: <span class="ruby-identifier">cleanup_running_jobs</span>
824
+ 178:
825
+ 179: <span class="ruby-ivar">@running_jobs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span>
826
+ 180: <span class="ruby-identifier">kill_job</span>(<span class="ruby-identifier">job</span>)
827
+ 181: <span class="ruby-identifier">job</span>.<span class="ruby-identifier">mark_for_redo</span>
828
+ 182: <span class="ruby-keyword kw">end</span>
829
+ 183: <span class="ruby-keyword kw">end</span></pre>
781
830
  </div>
782
831
 
783
832
  </div>
@@ -86,6 +86,10 @@
86
86
  <h3 class="section-header">Files</h3>
87
87
  <ul>
88
88
 
89
+ <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
90
+
91
+ <li class="file"><a href="../MIT-LICENSE.html">MIT-LICENSE</a></li>
92
+
89
93
  <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
90
94
 
91
95
  </ul>
@@ -127,6 +131,8 @@
127
131
 
128
132
  <li><a href="../MathJobs.html">MathJobs</a></li>
129
133
 
134
+ <li><a href="../Penguin.html">Penguin</a></li>
135
+
130
136
  <li><a href="../SleepJobs.html">SleepJobs</a></li>
131
137
 
132
138
  <li><a href="../StringJobs.html">StringJobs</a></li>
@@ -305,7 +311,7 @@
305
311
  <pre>
306
312
  <span class="ruby-comment cmt"># File lib/job_boss/config.rb, line 5</span>
307
313
  5: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse_args</span>(<span class="ruby-identifier">argv</span>, <span class="ruby-identifier">options</span> = {})
308
- 6: <span class="ruby-ivar">@application_root</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:working_dir</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">pwd</span>
314
+ 6: <span class="ruby-ivar">@application_root</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:working_dir</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">pwd</span>)
309
315
  7: <span class="ruby-ivar">@database_yaml_path</span> = <span class="ruby-value str">'config/database.yml'</span>
310
316
  8: <span class="ruby-ivar">@log_path</span> = <span class="ruby-value str">'log/job_boss.log'</span>
311
317
  9: <span class="ruby-ivar">@jobs_path</span> = <span class="ruby-value str">'app/jobs'</span>
@@ -319,7 +325,7 @@
319
325
  17: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">banner</span> = <span class="ruby-value str">&quot;Usage: job_boss [start|stop|restart|run|zap] [-- &lt;options&gt;]&quot;</span>
320
326
  18:
321
327
  19: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;-r&quot;</span>, <span class="ruby-value str">&quot;--application-root PATH&quot;</span>, <span class="ruby-value str">&quot;Path for the application root upon which other paths depend (defaults to .)&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>
322
- 20: <span class="ruby-ivar">@application_root</span> = <span class="ruby-identifier">path</span>
328
+ 20: <span class="ruby-ivar">@application_root</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">path</span>)
323
329
  21: <span class="ruby-keyword kw">end</span>
324
330
  22:
325
331
  23: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;-d&quot;</span>, <span class="ruby-value str">&quot;--database-yaml PATH&quot;</span>, <span class="ruby-node">&quot;Path for database YAML (defaults to &lt;application-root&gt;/#{@database_yaml_path})&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>