module PhusionPassenger

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2015 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

IMPORTANT: do not directly or indirectly require native_support; we can't compile it yet until we have a compiler, and installers usually check whether a compiler is installed.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

We lazy load as many libraries as possible not only to improve startup performance, but also to ensure that we don't require libraries before we've passed the dependency checking stage of the runtime installer.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2014 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2014 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2014 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010-2014 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2013 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Phusion Passenger - www.phusionpassenger.com/ Copyright © 2010 Phusion

“Phusion Passenger” is a trademark of Hongli Lai & Ninh Bui.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Constants

APACHE2_DOC_NAME
APACHE2_MODULE_CONF_NAME

The name for the /etc/apache2/mods-available/*.{load,conf} file.

FILE_LOCATION
GLOBAL_NAMESPACE_DIRNAME

Directories ######

INDEX_DOC_NAME

Other resource locations ######

NGINX_DOC_NAME
NGINX_SHA256_CHECKSUM
OPTIONAL_LOCATIONS_INI_FIELDS
ORIGINALLY_PACKAGED_LOCATIONS_INI_FIELDS

The subset of the optional fields which are only available when originally packaged.

PACKAGE_NAME

Names and version numbers ######

PASSENGER_APP_GROUP_NAME
PASSENGER_TXN_ID
PASSENGER_UNION_STATION_KEY
PCRE_SHA256_CHECKSUM
PLUGIN_DIRS

Directories in which to look for plugins.

PREFERRED_NGINX_VERSION
PREFERRED_PCRE_VERSION
RACK_HIJACK_IO
REQUIRED_LOCATIONS_INI_FIELDS
STANDALONE_DOC_NAME
STANDALONE_INTERFACE_VERSION
UNION_STATION_CORE
UNION_STATION_REQUEST_TRANSACTION
USER_NAMESPACE_DIRNAME

Subdirectory under $HOME to use for storing stuff.

VERSION_STRING

Run 'rake ext/common/Constants.h' after changing this number.

Public Class Methods

apache2_doc_path() click to toggle source
# File lib/phusion_passenger.rb, line 194
def self.apache2_doc_path
        return "#{doc_dir}/#{APACHE2_DOC_NAME}"
end
binaries_sites() click to toggle source
# File lib/phusion_passenger.rb, line 214
def self.binaries_sites
        return [
                { :url => "https://oss-binaries.phusionpassenger.com/binaries/passenger/by_release",
                  :cacert => "#{resources_dir}/oss-binaries.phusionpassenger.com.crt" },
                { :url => "https://s3.amazonaws.com/phusion-passenger/binaries/passenger/by_release" }
        ]
end
index_doc_path() click to toggle source
# File lib/phusion_passenger.rb, line 190
def self.index_doc_path
        return "#{doc_dir}/#{INDEX_DOC_NAME}"
end
installed_from_release_package?() click to toggle source

Whether the current Phusion Passenger installation is installed from a release package, e.g. an official gem or official tarball. Retruns false if e.g. the gem was built by the user, or if this install is from a git repository.

# File lib/phusion_passenger.rb, line 169
def self.installed_from_release_package?
        File.exist?("#{resources_dir}/release.txt")
end
locate_directories(source_root_or_location_configuration_file = nil) click to toggle source

Follows the logic of ext/common/ResourceLocator.h, so don't forget to modify that too.

# File lib/phusion_passenger.rb, line 97
def self.locate_directories(source_root_or_location_configuration_file = nil)
        source_root_or_location_configuration_file ||= find_location_configuration_file
        root_or_file = @source_root = source_root_or_location_configuration_file

        if root_or_file && File.file?(root_or_file)
                filename = root_or_file
                options  = parse_ini_file(filename)

                @natively_packaged = get_bool_option(filename, options, 'natively_packaged')
                REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
                        value = get_option(filename, options, field.to_s)
                        value.freeze unless value.nil?
                        instance_variable_set("@#{field}", value)
                end
                OPTIONAL_LOCATIONS_INI_FIELDS.each do |field|
                        value = get_option(filename, options, field.to_s, false)
                        value.freeze unless value.nil?
                        instance_variable_set("@#{field}", value)
                end
                if natively_packaged?
                        @native_packaging_method = get_option(filename, options, 'native_packaging_method')
                        ORIGINALLY_PACKAGED_LOCATIONS_INI_FIELDS.each do |field|
                                instance_variable_set("@#{field}", nil)
                        end
                end
        else
                @source_root           = File.dirname(File.dirname(FILE_LOCATION))
                @natively_packaged     = false
                @bin_dir               = "#{@source_root}/bin".freeze
                @agents_dir            = "#{@source_root}/buildout/agents".freeze
                @lib_dir               = "#{@source_root}/buildout".freeze
                @helper_scripts_dir    = "#{@source_root}/helper-scripts".freeze
                @resources_dir         = "#{@source_root}/resources".freeze
                @include_dir           = "#{@source_root}/ext".freeze
                @doc_dir               = "#{@source_root}/doc".freeze
                @ruby_libdir           = File.dirname(FILE_LOCATION).freeze
                @node_libdir           = "#{@source_root}/node_lib".freeze
                @apache2_module_path   = "#{@source_root}/buildout/apache2/mod_passenger.so".freeze
                @ruby_extension_source_dir = "#{@source_root}/ext/ruby".freeze
                @nginx_module_source_dir   = "#{@source_root}/ext/nginx".freeze
                @download_cache_dir        = "#{@source_root}/download_cache".freeze
                @build_system_dir          = @source_root.dup.freeze
                @buildout_dir              = "#{@source_root}/buildout".freeze
                @apache2_module_source_dir = @source_root.dup.freeze
                REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
                        if instance_variable_get("@#{field}").nil?
                                raise "BUG: @#{field} not set"
                        end
                end
        end
end
native_packaging_method() click to toggle source

If Phusion Passenger is natively packaged, returns which packaging method was used. Can be 'deb', 'rpm' or 'homebrew'.

# File lib/phusion_passenger.rb, line 161
def self.native_packaging_method
        return @native_packaging_method
end
natively_packaged?() click to toggle source
# File lib/phusion_passenger.rb, line 155
def self.natively_packaged?
        return @natively_packaged
end
nginx_doc_path() click to toggle source
# File lib/phusion_passenger.rb, line 198
def self.nginx_doc_path
        return "#{doc_dir}/#{NGINX_DOC_NAME}"
end
originally_packaged?() click to toggle source

Returns whether this Phusion Passenger installation is in the 'originally packaged' configuration (as opposed to the 'natively packaged' configuration.

# File lib/phusion_passenger.rb, line 151
def self.originally_packaged?
        return !@natively_packaged
end
require_passenger_lib(name) click to toggle source

Instead of calling `require 'phusion_passenger/foo'`, you should call `PhusionPassenger.require_passenger_lib 'foo'`. This is because when Phusion Passenger is natively packaged, it may still be run with arbitrary Ruby interpreters. Adding ruby_libdir to $LOAD_PATH is then dangerous because ruby_libdir may be the distribution's Ruby's vendor_ruby directory, which may be incompatible with the active Ruby interpreter. This method looks up the exact filename directly.

Using this method also has two more advantages:

1. It is immune to Bundler's load path mangling code.
2. It is faster than plan require() because it doesn't need to
   scan the entire load path.
# File lib/phusion_passenger.rb, line 235
def self.require_passenger_lib(name)
        require("#{ruby_libdir}/phusion_passenger/#{name}")
end
source_root() click to toggle source

When originally packaged, returns the source root. When natively packaged, returns the location of the location configuration file.

# File lib/phusion_passenger.rb, line 175
def self.source_root
        return @source_root
end
standalone_doc_path() click to toggle source
# File lib/phusion_passenger.rb, line 202
def self.standalone_doc_path
        return "#{doc_dir}/#{STANDALONE_DOC_NAME}"
end

Public Instance Methods

advertised_concurrency_level() click to toggle source
# File lib/phusion_passenger/public_api.rb, line 52
def advertised_concurrency_level
        @@advertised_concurrency_level
end
advertised_concurrency_level=(value) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 56
def advertised_concurrency_level=(value)
        @@advertised_concurrency_level = value
end
benchmark(env = nil, title = "Benchmarking", &block) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 71
def benchmark(env = nil, title = "Benchmarking", &block)
        measure_and_log_event(env, "BENCHMARK: #{title}", &block)
end
call_event(name, *args) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 38
def call_event(name, *args)
        callback_list_for_event(name).each do |callback|
                callback.call(*args)
        end
end
install_framework_extensions!(*args) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 44
def install_framework_extensions!(*args)
        require 'active_support/version' if defined?(::ActiveSupport) && !defined?(::ActiveSupport::VERSION)
        if defined?(::ActiveSupport) && ::ActiveSupport::VERSION::MAJOR >= 3
                PhusionPassenger.require_passenger_lib 'active_support3_extensions/init'
                ActiveSupport3Extensions.init!(PhusionPassenger::App.options, *args)
        end
end
log_cache_hit(env, name) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 158
def log_cache_hit(env, name)
        transaction = lookup_union_station_web_transaction(env)
        if transaction
                transaction.message("Cache hit: #{name}")
                return true
        else
                return false
        end
end
log_cache_miss(env, name, generation_time = nil) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 168
def log_cache_miss(env, name, generation_time = nil)
        transaction = lookup_union_station_web_transaction(env)
        if transaction
                if generation_time
                        transaction.message("Cache miss (#{generation_time.to_i}): #{name}")
                else
                        transaction.message("Cache miss: #{name}")
                end
                return true
        else
                return false
        end
end
log_controller_action(env, options) { || ... } click to toggle source

Log a controller action invocation.

# File lib/phusion_passenger/public_api.rb, line 113
def log_controller_action(env, options)
        transaction = lookup_union_station_web_transaction(env)
        if transaction
                if options[:controller_name]
                        if !options[:action_name]
                                raise ArgumentError, "The :action_name option must be set"
                        end
                        transaction.message("Controller action: #{options[:controller_name]}##{options[:action_name]}")
                end
                if options[:method]
                        transaction.message("Request method: #{options[:method]}")
                end
                transaction.measure("framework request processing") do
                        yield
                end
        else
                yield
        end
end
log_database_query(env, name, begin_time, end_time, sql) click to toggle source

Log a database query.

# File lib/phusion_passenger/public_api.rb, line 147
def log_database_query(env, name, begin_time, end_time, sql)
        transaction = lookup_union_station_web_transaction(env)
        if transaction
                digest = Digest::MD5.hexdigest("#{name}\0#{sql}\0#{rand}")
                transaction.measured_time_points("DB BENCHMARK: #{digest}",
                        begin_time,
                        end_time,
                        "#{name}\n#{sql}")
        end
end
log_request_exception(env, exception, options = nil) click to toggle source

Log an exception that occurred during a request.

# File lib/phusion_passenger/public_api.rb, line 76
def log_request_exception(env, exception, options = nil)
        return if !env[PASSENGER_TXN_ID]
        core = lookup_union_station_core(env)
        if core
                transaction = core.new_transaction(
                        env[PASSENGER_APP_GROUP_NAME],
                        :exceptions,
                        env[PASSENGER_UNION_STATION_KEY])
                begin
                        request_txn_id = env[PASSENGER_TXN_ID]
                        message = exception.message
                        message = exception.to_s if message.empty?
                        message = [message].pack('m')
                        message.gsub!("\n", "")
                        backtrace_string = [exception.backtrace.join("\n")].pack('m')
                        backtrace_string.gsub!("\n", "")

                        transaction.message("Request transaction ID: #{request_txn_id}")
                        transaction.message("Message: #{message}")
                        transaction.message("Class: #{exception.class.name}")
                        transaction.message("Backtrace: #{backtrace_string}")

                        if options && options[:controller_name]
                                if options[:action_name]
                                        controller_action = "#{options[:controller_name]}##{options[:action_name]}"
                                else
                                        controller_action = controller_name
                                end
                                transaction.message("Controller action: #{controller_action}")
                        end
                ensure
                        transaction.close
                end
        end
end
log_total_view_rendering_time(env, runtime) click to toggle source

Log the total view rendering time of a request.

# File lib/phusion_passenger/public_api.rb, line 134
def log_total_view_rendering_time(env, runtime)
        transaction = lookup_union_station_web_transaction(env)
        if transaction
                transaction.message("View rendering time: #{(runtime).to_i}")
        end
end
log_view_rendering(env = nil, &block) click to toggle source

Log a single view rendering.

# File lib/phusion_passenger/public_api.rb, line 142
def log_view_rendering(env = nil, &block)
        measure_and_log_event(env, "view rendering", &block)
end
measure_and_log_event(env, name) { || ... } click to toggle source
# File lib/phusion_passenger/public_api.rb, line 60
def measure_and_log_event(env, name)
        transaction = lookup_union_station_web_transaction(env)
        if transaction
                transaction.measure(name) do
                        yield
                end
        else
                yield
        end
end
on_event(name, &block) click to toggle source
# File lib/phusion_passenger/public_api.rb, line 34
def on_event(name, &block)
        callback_list_for_event(name) << block
end