Class: GoldenBrindle::Actions::Start
- Includes:
- Hooks
- Defined in:
- lib/golden_brindle/actions/start.rb
Instance Attribute Summary
Attributes inherited from Base
#done_validating, #original_args, #valid
Instance Method Summary collapse
- #bundler_cmd ⇒ Object
- #collect_listeners ⇒ Object
- #configure ⇒ Object
- #default_options ⇒ Object
- #parse_listen_option ⇒ Object
- #run ⇒ Object
- #validate ⇒ Object
Methods included from Hooks
#after_fork, #after_reload, #before_exec, #before_fork, #collect_hooks
Methods inherited from Base
#config_keys, #help, #initialize, #load_config, #options
Methods included from Validations
#can_change_user?, #failure, #valid?, #valid_dir?, #valid_exists?, #valid_file?, #valid_group?, #valid_user?
Constructor Details
This class inherits a constructor from GoldenBrindle::Base
Instance Method Details
#bundler_cmd ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/golden_brindle/actions/start.rb', line 72 def bundler_cmd cmd = "bundle exec #{@opt.program_name}" @original_args.each_slice(2) do |arg_key,value| cmd << " #{arg_key} #{value}" if arg_key != "-b" end cmd end |
#collect_listeners ⇒ Object
80 81 82 83 84 85 86 87 88 |
# File 'lib/golden_brindle/actions/start.rb', line 80 def collect_listeners return if @port.nil? start_port = end_port = nil start_port ||= @port.to_i end_port ||= start_port + @servers.to_i - 1 (start_port..end_port).map do |port| "#{@address}:#{port}" end end |
#configure ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/golden_brindle/actions/start.rb', line 8 def configure [ ["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"], ["-b", "--bundler", "Use bundler to start unicorn instances", :@bundler, false], ["-d", "--daemonize", "Run daemonized in the background", :@daemon, false], ['', "--preload", "Preload application", :@preload, false], ['-p', '--port PORT', "Which port to bind to (if set numbers of servers - start port number)", :@port, Unicorn::Const::DEFAULT_PORT], ['-a', '--address ADDR', "Address to bind to", :@address, Unicorn::Const::DEFAULT_HOST], ['-o', '--listen {HOST:PORT|PATH}',"listen on HOST:PORT or PATH, separated by comma (default: #{Unicorn::Const::DEFAULT_LISTEN})", :@listen, Unicorn::Const::DEFAULT_LISTEN], ['-l', '--log FILE', "Where to write log messages", :@log_file, "log/unicorn.log"], ['-P', '--pid FILE', "Where to write the PID", :@pid_file, "tmp/pids/unicorn.pid"], ['-n', '--num-workers INT', "Number of Unicorn workers", :@workers, 4], ['-N', '--num-servers INT', "Number of Unicorn listen records", :@servers, 1], ['-t', '--timeout INT', "Time to wait (in seconds) before killing a stalled thread", :@timeout, 60], ['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd], ['-D', '--debug', "Enable debugging mode", :@debug, false], ['-C', '--config PATH', "Use a mongrel based config file", :@config_file, nil], ['-S', '--script PATH', "Load the Unicorn-specific config file", :@config_script, nil], ['', '--user USER', "User to run as", :@user, nil], ['', '--group GROUP', "Group to run as", :@group, nil], ['', '--prefix PATH', "URL prefix for Rails app", :@prefix, nil] ] end |
#default_options ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/golden_brindle/actions/start.rb', line 61 def { :listeners => [], :pid => @pid_file, :config_file => @config_script, :worker_processes => @workers.to_i, :working_directory => @cwd, :timeout => @timeout.to_i } end |
#parse_listen_option ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/golden_brindle/actions/start.rb', line 90 def parse_listen_option return if @listen.nil? || @listen.empty? @listen.split(',').map do |listen| listen = File.join(@cwd,listen) if listen[0..0] != "/" && !listen.match(/\w+\:\w+/) "#{listen}" end end |
#run ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/golden_brindle/actions/start.rb', line 98 def run # Change there to start, then we'll have to come back after daemonize Dir.chdir(@cwd) if @bundler puts "Using Bundler" puts "reexec via bundle exec" exec(bundler_cmd) end = # set user via Unicorn options. If we don't set group - then use only user [:user] = @user unless @user.nil? [:stderr_path] = [:stdout_path] = @log_file if @daemon [:preload_app] = @preload .merge!(collect_hooks) ENV['RAILS_ENV'] = @environment ENV['RAILS_RELATIVE_URL_ROOT'] = @prefix [collect_listeners, parse_listen_option].each do |listeners| [:listeners] += listeners if listeners end app = ::GoldenBrindle::RailsSupport.rails_builder(@daemon) if @daemon Unicorn::Launcher.daemonize!() end puts "start Unicorn v#{Unicorn::Const::UNICORN_VERSION}..." if Unicorn.respond_to?(:run) Unicorn.run(app, ) else Unicorn::HttpServer.new(app, ).start.join end end |
#validate ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/golden_brindle/actions/start.rb', line 32 def validate if @config_file valid_exists?(@config_file, "Config file not there: #@config_file") return false unless @valid @config_file = File.(@config_file) load_config return false unless @valid end if @config_script valid_exists?(@config_script, "Unicorn-specific config file not there: #@config_script") return false unless @valid end if @bundler valid_exists?('Gemfile', "Cannot use Bundler - no Gemfile in your application root dir") return false unless @valid end @cwd = File.(@cwd) valid_dir? @cwd, "Invalid path to change to during daemon mode: #{@cwd}" valid?(@prefix[0] == ?/ && @prefix[-1] != ?/, "Prefix must begin with / and not end in /") if @prefix valid_dir? File.dirname(File.join(@cwd,@log_file)), "Path to log file not valid: #{@log_file}" valid_dir? File.dirname(File.join(@cwd,@pid_file)), "Path to pid file not valid: #{@pid_file}" valid_user? @user if @user valid_group? @group if @group @valid end |