Class: ReactOnRails::Dev::ServerManager
- Inherits:
-
Object
- Object
- ReactOnRails::Dev::ServerManager
- Defined in:
- lib/react_on_rails/dev/server_manager.rb
Class Method Summary collapse
- .cleanup_socket_files ⇒ Object
- .development_processes ⇒ Object
- .find_process_pids(pattern) ⇒ Object
- .kill_processes ⇒ Object
- .kill_running_processes ⇒ Object
- .print_kill_summary(killed_any) ⇒ Object
- .show_help ⇒ Object
- .start(mode = :development, procfile = nil, verbose: false) ⇒ Object
- .terminate_processes(pids) ⇒ Object
Class Method Details
.cleanup_socket_files ⇒ Object
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_processes ⇒ Object
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_processes ⇒ Object
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_processes ⇒ Object
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 |
.print_kill_summary(killed_any) ⇒ Object
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_help ⇒ Object
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 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 |