class ReactOnRails::Dev::FileManager
def cleanup_overmind_sockets
def cleanup_overmind_sockets return false if overmind_running? socket_files = [".overmind.sock", "tmp/sockets/overmind.sock"] cleaned_any = false socket_files.each do |socket_file| cleaned_any = true if remove_file_if_exists(socket_file, "stale socket") end cleaned_any end
def cleanup_rails_pid_file
def cleanup_rails_pid_file server_pid_file = "tmp/pids/server.pid" return false unless File.exist?(server_pid_file) pid_content = File.read(server_pid_file).strip begin pid = Integer(pid_content) # PIDs must be > 1 (0 is kernel, 1 is init) if pid <= 1 remove_file_if_exists(server_pid_file, "stale Rails pid file") return true end rescue ArgumentError, TypeError remove_file_if_exists(server_pid_file, "stale Rails pid file") return true end return false if process_running?(pid) remove_file_if_exists(server_pid_file, "stale Rails pid file") end
def cleanup_stale_files
def cleanup_stale_files socket_cleanup = cleanup_overmind_sockets pid_cleanup = cleanup_rails_pid_file socket_cleanup || pid_cleanup end
def overmind_running?
def overmind_running? !`pgrep -f "overmind" 2>/dev/null`.split("\n").empty? end
def process_running?(pid)
def process_running?(pid) Process.kill(0, pid) true rescue Errno::ESRCH, ArgumentError, RangeError # Process doesn't exist or invalid PID false rescue Errno::EPERM # Process exists but we don't have permission to signal it true end
def remove_file_if_exists(file_path, description)
def remove_file_if_exists(file_path, description) return false unless File.exist?(file_path) puts " 🧹 Cleaning up #{description}: #{file_path}" File.delete(file_path) true rescue StandardError false end