‘
Contains $PWD of rct-fork server. Exists only while running.
# File lib/rcodetools/fork.rb, line 64 64: def self.add_env_args(opts, settings) 65: opts.separator '' 66: opts.separator 'Process environment options:' 67: 68: opts.separator '' 69: opts.on('-e CODE', 'Execute CODE in parent process.', 70: 'May be specified multiple times.') do |code| 71: settings[:code] << code 72: end 73: 74: opts.separator '' 75: opts.on('-I DIRECTORY', 'Adds DIRECTORY to $LOAD_PATH.', 76: 'May be specified multiple times.') do |dir| 77: settings[:extra_paths] << dir 78: end 79: 80: opts.separator '' 81: opts.on('-r LIBRARY', 'Require LIBRARY in the parent process.', 82: 'May be specified multiple times.') do |lib| 83: settings[:requires] << lib 84: end 85: end
# File lib/rcodetools/fork_config.rb, line 9 9: def self.chdir_fork_directory 10: if run? 11: Dir.chdir File.read(PWD_FILE) 12: else 13: raise "rct-fork is not running." 14: end 15: end
# File lib/rcodetools/fork.rb, line 87 87: def self.daemonize(io = File.open('/dev/null', 'r+')) 88: fork and exit! 89: Process.setsid 90: fork and exit! 91: 92: STDIN.reopen io 93: STDOUT.reopen io 94: STDERR.reopen io 95: 96: yield if block_given? 97: end
# File lib/rcodetools/fork.rb, line 99 99: def self.parse_client_args(args) 100: settings = Marshal.load Marshal.dump(DEFAULT_SETTINGS) 101: 102: opts = OptionParser.new do |opts| 103: opts.banner = "Usage: #{$0} [options]\n#{USAGE_HELP}" 104: 105: opts.separator '' 106: opts.on('-p', '--port PORT', 107: 'Listen for connections on PORT.', 108: "Default: #{settings[:port]}") do |port| 109: settings[:port] = port.to_i 110: end 111: 112: opts.separator '' 113: opts.on('-h', '--help', 'You\re looking at it.') do 114: $stderr.puts opts 115: exit 1 116: end 117: 118: add_env_args opts, settings 119: end 120: 121: opts.parse! args 122: 123: return settings 124: end
# File lib/rcodetools/fork.rb, line 126 126: def self.parse_server_args(args) 127: settings = Marshal.load Marshal.dump(DEFAULT_SETTINGS) 128: 129: opts = OptionParser.new do |opts| 130: opts.banner = "Usage: #{$0} [options]\n#{USAGE_HELP}" 131: 132: opts.separator '' 133: opts.on('-p', '--port PORT', 134: 'Listen for connections on PORT.', 135: "Default: #{settings[:port]}") do |port| 136: settings[:port] = port.to_i 137: end 138: 139: opts.separator '' 140: opts.on('-h', '--help', 'You\re looking at it.') do 141: $stderr.puts opts 142: exit 1 143: end 144: 145: add_env_args opts, settings 146: end 147: 148: opts.parse! args 149: 150: return settings 151: end
# File lib/rcodetools/fork_config.rb, line 21 21: def self.run? 22: File.file? PWD_FILE 23: end
# File lib/rcodetools/fork.rb, line 213 213: def self.setup_environment(settings) 214: settings[:extra_paths].map! { |dir| dir.split ':' } 215: settings[:extra_paths].flatten! 216: settings[:extra_paths].each { |dir| $:.unshift dir } 217: 218: begin 219: settings[:requires].each { |file| require file } 220: settings[:code].each { |code| eval code, TOPLEVEL_BINDING } 221: rescue Exception 222: $@.reject! {|s| s =~ %rcodetools/fork\.rb!} 223: raise 224: end 225: end
# File lib/rcodetools/fork.rb, line 153 153: def self.start_client(args = ARGV) 154: trap 'INT' do exit 1 end # Exit gracefully 155: 156: settings = parse_client_args args 157: 158: args = Marshal.dump [settings, ARGV] 159: 160: socket = TCPSocket.new 'localhost', settings[:port] 161: 162: socket.puts args.length 163: socket.write args 164: socket.close_write 165: 166: until socket.eof? 167: $stdout.puts socket.gets 168: end 169: end
# File lib/rcodetools/fork.rb, line 171 171: def self.start_server(args = ARGV) 172: begin 173: require 'rubygems' 174: rescue LoadError 175: end 176: write_pwd 177: settings = parse_server_args args 178: setup_environment settings 179: 180: server = TCPServer.new 'localhost', settings[:port] 181: 182: $stderr.puts "#{$0} Running as PID #{$$} on #{settings[:port]}" 183: 184: loop do 185: Thread.new server.accept do |socket| 186: begin 187: args_length = socket.gets.to_i 188: args = socket.read args_length 189: settings, argv = Marshal.load args 190: 191: fork do 192: daemonize socket do 193: ARGV.replace argv 194: setup_environment settings 195: socket.close 196: end 197: end 198: 199: socket.close # close my copy. 200: rescue => e 201: socket.close if socket 202: end 203: end 204: end 205: rescue Interrupt, SystemExit 206: File.unlink PWD_FILE 207: rescue Exception => e 208: File.unlink PWD_FILE 209: puts "Failed to catch #{e.class}:#{e.message}" 210: puts "\t#{e.backtrace.join "\n\t"}" 211: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.