Class: ReactOnRails::Dev::ServerManager

Inherits:
Object
  • Object
show all
Defined in:
lib/react_on_rails/dev/server_manager.rb

Class Method Summary collapse

Class Method Details

.cleanup_socket_filesObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/react_on_rails/dev/server_manager.rb', line 78

def cleanup_socket_files
  files = [".overmind.sock", "tmp/sockets/overmind.sock", "tmp/pids/server.pid"]
  killed_any = false

  files.each do |file|
    next unless File.exist?(file)

    puts "   🧹 Removing #{file}"
    File.delete(file)
    killed_any = true
  rescue StandardError
    nil
  end

  killed_any
end

.development_processesObject



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/react_on_rails/dev/server_manager.rb', line 35

def development_processes
  {
    "rails" => "Rails server",
    "node.*react[-_]on[-_]rails" => "React on Rails Node processes",
    "overmind" => "Overmind process manager",
    "foreman" => "Foreman process manager",
    "ruby.*puma" => "Puma server",
    "webpack-dev-server" => "Webpack dev server",
    "bin/shakapacker-dev-server" => "Shakapacker dev server"
  }
end

.find_process_pids(pattern) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/react_on_rails/dev/server_manager.rb', line 62

def find_process_pids(pattern)
  stdout, _status = Open3.capture2("pgrep", "-f", pattern, err: File::NULL)
  stdout.split("\n").map(&:to_i).reject { |pid| pid == Process.pid }
rescue Errno::ENOENT
  # pgrep command not found
  []
end

.kill_processesObject



26
27
28
29
30
31
32
33
# File 'lib/react_on_rails/dev/server_manager.rb', line 26

def kill_processes
  puts "🔪 Killing all development processes..."
  puts ""

  killed_any = kill_running_processes || cleanup_socket_files

  print_kill_summary(killed_any)
end

.kill_running_processesObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/react_on_rails/dev/server_manager.rb', line 47

def kill_running_processes
  killed_any = false

  development_processes.each do |pattern, description|
    pids = find_process_pids(pattern)
    next unless pids.any?

    puts "   ☠️  Killing #{description} (PIDs: #{pids.join(', ')})"
    terminate_processes(pids)
    killed_any = true
  end

  killed_any
end


95
96
97
98
99
100
101
102
103
# File 'lib/react_on_rails/dev/server_manager.rb', line 95

def print_kill_summary(killed_any)
  if killed_any
    puts ""
    puts "✅ All processes terminated and sockets cleaned"
    puts "💡 You can now run 'bin/dev' for a clean start"
  else
    puts "   ℹ️  No development processes found running"
  end
end

.show_helpObject



105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/react_on_rails/dev/server_manager.rb', line 105

def show_help
  puts help_usage
  puts ""
  puts help_commands
  puts ""
  puts help_options
  puts ""
  puts help_customization
  puts ""
  puts help_mode_details
  puts ""
  puts help_troubleshooting
end

.start(mode = :development, procfile = nil, verbose: false) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/react_on_rails/dev/server_manager.rb', line 11

def start(mode = :development, procfile = nil, verbose: false)
  case mode
  when :production_like
    run_production_like(_verbose: verbose)
  when :static
    procfile ||= "Procfile.dev-static-assets"
    run_static_development(procfile, verbose: verbose)
  when :development, :hmr
    procfile ||= "Procfile.dev"
    run_development(procfile, verbose: verbose)
  else
    raise ArgumentError, "Unknown mode: #{mode}"
  end
end

.terminate_processes(pids) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/react_on_rails/dev/server_manager.rb', line 70

def terminate_processes(pids)
  pids.each do |pid|
    Process.kill("TERM", pid)
  rescue StandardError
    nil
  end
end