|
1 | 1 | require "puma/plugin"
|
2 | 2 |
|
| 3 | +module Puma |
| 4 | + class DSL |
| 5 | + def solid_queue_mode(mode = :fork) |
| 6 | + @options[:solid_queue_mode] = mode.to_sym |
| 7 | + end |
| 8 | + end |
| 9 | +end |
| 10 | + |
3 | 11 | Puma::Plugin.create do
|
4 |
| - attr_reader :puma_pid, :solid_queue_pid, :log_writer |
| 12 | + attr_reader :puma_pid, :solid_queue_pid, :log_writer, :solid_queue_supervisor |
5 | 13 |
|
6 | 14 | def start(launcher)
|
7 | 15 | @log_writer = launcher.log_writer
|
8 | 16 | @puma_pid = $$
|
9 | 17 |
|
10 |
| - in_background do |
11 |
| - monitor_solid_queue |
| 18 | + if launcher.options[:solid_queue_mode] == :async |
| 19 | + start_async(launcher) |
| 20 | + else |
| 21 | + start_forked(launcher) |
12 | 22 | end
|
| 23 | + end |
13 | 24 |
|
14 |
| - launcher.events.on_booted do |
15 |
| - @solid_queue_pid = fork do |
16 |
| - Thread.new { monitor_puma } |
17 |
| - SolidQueue::Supervisor.start |
| 25 | + private |
| 26 | + def start_forked(launcher) |
| 27 | + in_background do |
| 28 | + monitor_solid_queue |
18 | 29 | end
|
| 30 | + |
| 31 | + launcher.events.on_booted do |
| 32 | + @solid_queue_pid = fork do |
| 33 | + Thread.new { monitor_puma } |
| 34 | + SolidQueue::Supervisor.start(mode: :fork) |
| 35 | + end |
| 36 | + end |
| 37 | + |
| 38 | + launcher.events.on_stopped { stop_solid_queue } |
| 39 | + launcher.events.on_restart { stop_solid_queue } |
19 | 40 | end
|
20 | 41 |
|
21 |
| - launcher.events.on_stopped { stop_solid_queue } |
22 |
| - launcher.events.on_restart { stop_solid_queue } |
23 |
| - end |
| 42 | + def start_async(launcher) |
| 43 | + launcher.events.on_booted { @solid_queue_supervisor = SolidQueue::Supervisor.start(mode: :async) } |
| 44 | + launcher.events.on_stopped { solid_queue_supervisor.stop } |
| 45 | + launcher.events.on_restart { solid_queue_supervisor.stop; solid_queue_supervisor.start } |
| 46 | + end |
24 | 47 |
|
25 |
| - private |
26 | 48 | def stop_solid_queue
|
27 | 49 | Process.waitpid(solid_queue_pid, Process::WNOHANG)
|
28 | 50 | log "Stopping Solid Queue..."
|
|
0 commit comments