0
def initialize(options)
0
@options = options.merge(:daemonize => true)
0
@size = @options.delete(:servers)
0
+ @script = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'thin')
0
+ @options.delete(:address)
0
+ @options.delete(:port)
0
def first_port; @options[:port] end
0
- def address; @options[:address] end
0
+ def address; @options[:address] end
0
+ def socket; @options[:socket] end
0
def pid_file; File.expand_path File.join(@options[:chdir], @options[:pid]) end
0
def log_file; File.expand_path File.join(@options[:chdir], @options[:log]) end
0
- with_each_server { |port| start_
on_port port }
0
+ with_each_server { |port| start_
server port }
0
- # Start the server on a single port
0
- def start_on_port(port)
0
- log "Starting #{address}:#{port} ... "
0
+ # Start a single server
0
+ def start_server(number)
0
+ log "Starting server on #{server_id(number)} ... "
0
- run :start, @options,
port0
+ run :start, @options,
number0
- with_each_server { |
port| stop_on_port port }
0
+ with_each_server { |
n| stop_server n }
0
- # Stop the server running on +port+
0
- def stop_on_port(port)
0
- log "Stopping #{address}:#{port} ... "
0
+ # Stop a single server
0
+ def stop_server(number)
0
+ log "Stopping server on #{server_id(number)} ... "
0
- run :stop, @options,
port0
+ run :stop, @options,
number0
# Stop and start the servers.
0
- def log_file_for(port)
0
- include_port_number log_file, port
0
+ [address, number].join(':')
0
- def pid_file_for(port)
0
- include_port_number pid_file, port
0
+ def log_file_for(number)
0
+ include_server_number log_file, number
0
- File.read(pid_file_for(port)).chomp.to_i
0
+ def pid_file_for(number)
0
+ include_server_number pid_file, number
0
+ def socket_for(number)
0
+ include_server_number socket, number
0
+ File.read(pid_file_for(number)).chomp.to_i
0
# Send the command to the +thin+ script
0
- def run(cmd, options, port)
0
- shell_cmd = shellify(cmd, options.merge(:port => port, :pid => pid_file_for(port), :log => log_file_for(port)))
0
+ def run(cmd, options, number)
0
+ cmd_options = options.dup
0
+ cmd_options.merge!(:pid => pid_file_for(number), :log => log_file_for(number))
0
+ cmd_options.merge!(:socket => socket_for(number))
0
+ cmd_options.merge!(:port => number)
0
+ shell_cmd = shellify(cmd, cmd_options)
0
ouput = `#{shell_cmd}`.chomp
0
- log
ouput unless ouput.empty?
0
+ log
" " + ouput.gsub("\n", " \n") unless ouput.empty?
0
# Turn into a runnable shell command
0
- @size.times { |n| yield first_port + n }
0
+ yield socket ? n : (first_port + n)
0
- # Add the
port numbers in the filename
0
+ # Add the
server port or number in the filename
0
# so each instance get its own file
0
- def include_port_number(path, port)
0
- raise ArgumentError, "filename '#{path}' must include an extension" unless path =~ /\./
0
- path.gsub(/\.(.+)$/) { ".#{port}.#{$1}" }
0
+ def include_server_number(path, number)
0
+ ext = File.extname(path)
0
+ path.gsub(/#{ext}$/, ".#{number}#{ext}")
Comments
No one has commented yet.