class PhusionPassenger::Config::RestartAppCommand

Private Class Methods

create_option_parser(options) click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 45
def self.create_option_parser(options)
        OptionParser.new do |opts|
                nl = "\n" + ' ' * 37
                opts.banner =
                        "Usage 1: passenger-config restart-app <APP PATH PREFIX> [OPTIONS]\n" +
                        "Usage 2: passenger-config restart-app --name <APP GROUP NAME> [OPTIONS]"
                opts.separator ""
                opts.separator "  Restart an application. The syntax determines how the application that is to"
                opts.separator "  be restarted, will be selected."
                opts.separator ""
                opts.separator "  1. Selects all applications whose paths begin with the given prefix."
                opts.separator ""
                opts.separator "     Example: passenger-config restart-app /webapps"
                opts.separator "     Restarts all apps whose path begin with /webapps, such as /webapps/foo,"
                opts.separator "     /webapps/bar and /webapps123."
                opts.separator ""
                opts.separator "  2. Selects a specific application based on an exact match of its app group"
                opts.separator "     name."
                opts.separator ""
                opts.separator "     Example: passenger-config restart-app --name /webapps/foo"
                opts.separator "     Restarts only /webapps/foo, but not for example /webapps/foo/bar or"
                opts.separator "     /webapps/foo123."
                opts.separator ""

                opts.separator "Options:"
                opts.on("--name APP_GROUP_NAME", String, "The app group name to select") do |value|
                        options[:app_group_name] = value
                end
                opts.on("--rolling-restart", "Perform a rolling restart instead of a#{nl}" +
                        "regular restart (Enterprise only). The#{nl}" +
                        "default is a blocking restart") do |value|
                        if Config::Utils.is_enterprise?
                                options[:rolling_restart] = true
                        else
                                abort "--rolling-restart is only available in #{PROGRAM_NAME} Enterprise: #{ENTERPRISE_URL}"
                        end
                end
                opts.on("--ignore-app-not-running", "Exit successfully if the specified#{nl}" +
                        "application is not currently running. The#{nl}" +
                        "default is to exit with an error") do
                        options[:ignore_app_not_running] = true
                end
                opts.on("--instance PID", Integer, "The #{PROGRAM_NAME} instance to select") do |value|
                        options[:instance] = value
                end
                opts.on("-h", "--help", "Show this help") do
                        options[:help] = true
                end
        end
end

Public Instance Methods

run() click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 36
def run
        parse_options
        select_passenger_instance
        @admin_client = connect_to_passenger_admin_socket(:role => :passenger_status)
        select_app_group_name
        perform_restart
end

Private Instance Methods

abort_app_not_found(message) click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 145
def abort_app_not_found(message)
        if @options[:ignore_app_not_running]
                STDERR.puts(message)
                exit
        else
                abort(message)
        end
end
help() click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 96
def help
        puts @parser
end
parse_options() click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 100
def parse_options
        super
        case @argv.size
        when 0
                if !@options[:app_group_name]
                        abort "Please pass either an app path prefix or an app group name. " +
                                "See --help for more information."
                end
        when 1
                if @options[:app_group_name]
                        abort "You've passed an app path prefix, but you cannot also pass an " +
                                "app group name. Please use only either one of them. See --help " +
                                "for more information."
                end
        else
                help
                abort
        end
end
perform_restart() click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 136
def perform_restart
        restart_method = @options[:rolling_restart] ? "rolling" : "blocking"
        @groups.each do |group|
                puts "Restarting #{group.name}"
                @admin_client.restart_app_group(group.name,
                        :method => restart_method)
        end
end
select_app_group_name() click to toggle source
# File lib/phusion_passenger/config/restart_app_command.rb, line 120
def select_app_group_name
        groups = @server_instance.groups(@admin_client)
        if app_group_name = @options[:app_group_name]
                @groups = [groups.find { |g| g.name == app_group_name }]
                if !@groups[0]
                        abort_app_not_found "There is no #{PROGRAM_NAME}-served application running with the app group name '#{app_group_name}'."
                end
        else
                regex = /^#{Regexp.escape(@argv.first)}/
                @groups = groups.find_all { |g| g.app_root =~ regex }
                if @groups.empty?
                        abort_app_not_found "There are no #{PROGRAM_NAME}-served applications running whose paths begin with '#{@argv.first}'."
                end
        end
end