Sha256: 4391e7f033baa05d4be36157b501d771d492a0ef3a6c3cc157fe3cdf4ccecb68
Contents?: true
Size: 1.32 KB
Versions: 32
Compression:
Stored size: 1.32 KB
Contents
require "puma/plugin" Puma::Plugin.create do attr_reader :puma_pid, :tailwind_pid, :log_writer def start(launcher) @log_writer = launcher.log_writer @puma_pid = $$ @tailwind_pid = fork do Thread.new { monitor_puma } system(*Tailwindcss::Commands.watch_command) end launcher.events.on_stopped { stop_tailwind } in_background do monitor_tailwind end end private def stop_tailwind Process.waitpid(tailwind_pid, Process::WNOHANG) log "Stopping tailwind..." Process.kill(:INT, tailwind_pid) if tailwind_pid Process.wait(tailwind_pid) rescue Errno::ECHILD, Errno::ESRCH end def monitor_puma monitor(:puma_dead?, "Detected Puma has gone away, stopping tailwind...") end def monitor_tailwind monitor(:tailwind_dead?, "Detected tailwind has gone away, stopping Puma...") end def monitor(process_dead, message) loop do if send(process_dead) log message Process.kill(:INT, $$) break end sleep 2 end end def tailwind_dead? Process.waitpid(tailwind_pid, Process::WNOHANG) false rescue Errno::ECHILD, Errno::ESRCH true end def puma_dead? Process.ppid != puma_pid end def log(...) log_writer.log(...) end end
Version data entries
32 entries across 32 versions & 1 rubygems