Parent

Class/Module Index [+]

Quicksearch

PhusionPassenger::AbstractInstaller

Abstract base class for text mode installers. Used by passenger-install-apache2-module and passenger-install-nginx-module.

Subclasses must at least implement the run_steps method which handles the installation itself.

Usage:

installer = ConcereteInstallerClass.new(options...)
installer.run

Public Class Methods

new(options = {}) click to toggle source

Create an AbstractInstaller. All options will be stored as instance variables, for example:

installer = AbstractInstaller.new(:foo => "bar")
installer.instance_variable_get(:"@foo")   # => "bar"
# File lib/phusion_passenger/abstract_installer.rb, line 55
def initialize(options = {})
        @stdout = STDOUT
        @stderr = STDERR
        options.each_pair do |key, value|
                instance_variable_set(:"@#{key}", value)
        end
end

Public Instance Methods

run() click to toggle source

Start the installation by calling the install! method.

# File lib/phusion_passenger/abstract_installer.rb, line 64
def run
        before_install
        run_steps
        return true
rescue Abort
        puts
        return false
rescue PlatformInfo::RuntimeError => e
        new_screen
        puts "<red>An error occurred</red>"
        puts
        puts e.message
        exit 1
ensure
        after_install
end

Protected Instance Methods

after_install() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 103
def after_install
        STDOUT.write(Utils::AnsiColors::RESET)
        STDOUT.flush
end
before_install() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 98
def before_install
        STDOUT.write(Utils::AnsiColors::DEFAULT_TERMINAL_COLOR)
        STDOUT.flush
end
check_dependencies(show_new_screen = true) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 112
def check_dependencies(show_new_screen = true)
        new_screen if show_new_screen
        puts "<banner>Checking for required software...</banner>"
        puts
        
        require 'phusion_passenger/platform_info/depcheck'
        specs, ids = dependencies
        runner = PlatformInfo::Depcheck::ConsoleRunner.new

        specs.each do |spec|
                PlatformInfo::Depcheck.load(spec)
        end
        ids.each do |id|
                runner.add(id)
        end

        if runner.check_all
                return true
        else
                puts
                puts "<red>Some required software is not installed.</red>"
                puts "But don't worry, this installer will tell you how to install them.\n"
                puts "<b>Press Enter to continue, or Ctrl-C to abort.</b>"
                if PhusionPassenger.originally_packaged?
                        wait
                else
                        wait(10)
                end

                line
                puts
                puts "<banner>Installation instructions for required software</banner>"
                puts
                runner.missing_dependencies.each do |dep|
                        puts " * To install <yellow>#{dep.name}</yellow>:"
                        puts "   #{dep.install_instructions}"
                        puts
                end
                if respond_to?(:users_guide)
                        puts "If the aforementioned instructions didn't solve your problem, then please take"
                        puts "a look at the Users Guide:"
                        puts
                        puts "  <yellow>#{users_guide}</yellow>"
                end
                return false
        end
end
dependencies() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 108
def dependencies
        return [[], []]
end
download(url, output) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 303
def download(url, output)
        if PlatformInfo.find_command("wget")
                return sh("wget", "-O", output, url)
        else
                return sh("curl", url, "-f", "-L", "-o", output)
        end
end
interactive?() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 89
def interactive?
        return !@auto
end
line() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 200
def line
        puts "--------------------------------------------"
end
new_screen() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 194
def new_screen
        puts
        line
        puts
end
non_interactive?() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 93
def non_interactive?
        return !interactive?
end
prompt(message, default_value = nil) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 204
def prompt(message, default_value = nil)
        done = false
        while !done
                print "#{message}: "
                
                if non_interactive? && default_value
                        puts default_value
                        return default_value
                end
                
                begin
                        result = STDIN.readline
                rescue EOFError
                        exit 2
                end
                result.strip!
                if result.empty?
                        if default_value
                                result = default_value
                                done = true
                        else
                                done = !block_given? || yield(result)
                        end
                else
                        done = !block_given? || yield(result)
                end
        end
        return result
end
prompt_confirmation(message) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 234
def prompt_confirmation(message)
        result = prompt("#{message} [y/n]") do |value|
                if value.downcase == 'y' || value.downcase == 'n'
                        true
                else
                        puts_error "Invalid input '#{value}'; please enter either 'y' or 'n'."
                        false
                end
        end
        return result.downcase == 'y'
end
puts(text = nil) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 176
def puts(text = nil)
        if text
                @stdout.puts(Utils::AnsiColors.ansi_colorize(text))
        else
                @stdout.puts
        end
        @stdout.flush
end
puts_error(text) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 185
def puts_error(text)
        @stderr.puts(Utils::AnsiColors.ansi_colorize("<red>#{text}</red>"))
        @stderr.flush
end
rake(*args) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 285
def rake(*args)
        require 'phusion_passenger/platform_info/ruby'
        if !PlatformInfo.rake_command
                puts_error 'Cannot find Rake.'
                raise Abort
        end
        sh("#{PlatformInfo.rake_command} #{args.join(' ')}")
end
rake!(*args) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 294
def rake!(*args)
        require 'phusion_passenger/platform_info/ruby'
        if !PlatformInfo.rake_command
                puts_error 'Cannot find Rake.'
                raise Abort
        end
        sh!("#{PlatformInfo.rake_command} #{args.join(' ')}")
end
render_template(name, options = {}) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 190
def render_template(name, options = {})
        puts ConsoleTextTemplate.new({ :file => name }, options).result
end
sh(*args) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 266
def sh(*args)
        puts "# #{args.join(' ')}"
        result = system(*args)
        if result
                return true
        elsif $?.signaled? && $?.termsig == Signal.list["INT"]
                raise Interrupt
        else
                return false
        end
end
sh!(*args) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 278
def sh!(*args)
        if !sh(*args)
                puts_error "*** Command failed: #{args.join(' ')}"
                raise CommandError
        end
end
use_stderr() click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 161
def use_stderr
        old_stdout = @stdout
        begin
                @stdout = STDERR
                yield
        ensure
                @stdout = old_stdout
        end
end
wait(timeout = nil) click to toggle source
# File lib/phusion_passenger/abstract_installer.rb, line 246
def wait(timeout = nil)
        if interactive?
                if timeout
                        require 'timeout' unless defined?(Timeout)
                        begin
                                Timeout.timeout(timeout) do
                                        STDIN.readline
                                end
                        rescue Timeout::Error
                                # Do nothing.
                        end
                else
                        STDIN.readline
                end
        end
rescue Interrupt
        raise Abort
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.