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

Version Path
tailwindcss-rails-2.4.0 lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-x86_64-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-x86_64-darwin lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-x64-mingw32 lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-x64-mingw-ucrt lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-arm64-darwin lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-arm-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.4.0-aarch64-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0 lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-x86_64-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-x86_64-darwin lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-x64-mingw32 lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-x64-mingw-ucrt lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-arm64-darwin lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-arm-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.3.0-aarch64-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.2.1 lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.2.1-x86_64-linux lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.2.1-x86_64-darwin lib/puma/plugin/tailwindcss.rb
tailwindcss-rails-2.2.1-x64-mingw32 lib/puma/plugin/tailwindcss.rb