passenger 5.0.0.beta3 → 5.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +11 -5
- data/CHANGELOG +38 -0
- data/CONTRIBUTING.md +1 -4
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -2
- data/Rakefile +33 -33
- data/bin/passenger +1 -1
- data/bin/passenger-config +1 -1
- data/bin/passenger-install-apache2-module +800 -800
- data/bin/passenger-install-nginx-module +592 -592
- data/bin/passenger-memory-stats +127 -127
- data/bin/passenger-status +216 -216
- data/build/agents.rb +127 -127
- data/build/apache2.rb +87 -87
- data/build/basics.rb +60 -60
- data/build/common_library.rb +165 -165
- data/build/cplusplus_support.rb +51 -51
- data/build/cxx_tests.rb +268 -268
- data/build/debian.rb +143 -143
- data/build/documentation.rb +58 -58
- data/build/integration_tests.rb +81 -81
- data/build/misc.rb +132 -132
- data/build/nginx.rb +20 -20
- data/build/node_tests.rb +7 -7
- data/build/oxt_tests.rb +14 -14
- data/build/packaging.rb +570 -570
- data/build/preprocessor.rb +260 -260
- data/build/rake_extensions.rb +71 -71
- data/build/ruby_extension.rb +29 -29
- data/build/ruby_tests.rb +6 -6
- data/build/test_basics.rb +37 -37
- data/debian.template/control.template +3 -5
- data/dev/copy_boost_headers +134 -134
- data/dev/install_scripts_bootstrap_code.rb +25 -25
- data/dev/list_tests +20 -20
- data/dev/ruby_server.rb +223 -223
- data/dev/runner +18 -18
- data/doc/ServerOptimizationGuide.txt.md +55 -2
- data/doc/Users guide Nginx.txt +0 -26
- data/doc/Users guide Standalone.txt +5 -1
- data/doc/users_guide_snippets/tips.txt +9 -0
- data/ext/common/ApplicationPool2/Group.h +23 -11
- data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
- data/ext/common/ApplicationPool2/Pool.h +22 -17
- data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
- data/ext/common/ApplicationPool2/Spawner.h +1 -1
- data/ext/common/Constants.h +1 -1
- data/ext/common/agents/Base.cpp +35 -20
- data/ext/common/agents/HelperAgent/Main.cpp +8 -1
- data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
- data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
- data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
- data/ext/common/agents/Main.cpp +1 -1
- data/ext/common/agents/Watchdog/Main.cpp +54 -19
- data/ext/nginx/Configuration.c +7 -0
- data/ext/nginx/ContentHandler.c +9 -1
- data/helper-scripts/backtrace-sanitizer.rb +106 -87
- data/helper-scripts/crash-watch.rb +32 -0
- data/helper-scripts/download_binaries/extconf.rb +38 -38
- data/helper-scripts/meteor-loader.rb +107 -107
- data/helper-scripts/prespawn +101 -101
- data/helper-scripts/rack-loader.rb +96 -96
- data/helper-scripts/rack-preloader.rb +137 -137
- data/lib/phusion_passenger.rb +292 -292
- data/lib/phusion_passenger/abstract_installer.rb +438 -438
- data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
- data/lib/phusion_passenger/admin_tools.rb +20 -20
- data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
- data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
- data/lib/phusion_passenger/apache2/config_options.rb +182 -182
- data/lib/phusion_passenger/common_library.rb +479 -485
- data/lib/phusion_passenger/config/about_command.rb +161 -161
- data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
- data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
- data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
- data/lib/phusion_passenger/config/command.rb +25 -25
- data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
- data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
- data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
- data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
- data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
- data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
- data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
- data/lib/phusion_passenger/config/installation_utils.rb +204 -204
- data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
- data/lib/phusion_passenger/config/main.rb +152 -152
- data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
- data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
- data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
- data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
- data/lib/phusion_passenger/config/utils.rb +95 -95
- data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
- data/lib/phusion_passenger/console_text_template.rb +25 -25
- data/lib/phusion_passenger/constants.rb +90 -90
- data/lib/phusion_passenger/debug_logging.rb +106 -106
- data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
- data/lib/phusion_passenger/message_channel.rb +312 -312
- data/lib/phusion_passenger/message_client.rb +176 -176
- data/lib/phusion_passenger/native_support.rb +369 -369
- data/lib/phusion_passenger/nginx/config_options.rb +297 -297
- data/lib/phusion_passenger/packaging.rb +131 -131
- data/lib/phusion_passenger/platform_info.rb +360 -360
- data/lib/phusion_passenger/platform_info/apache.rb +767 -767
- data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
- data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
- data/lib/phusion_passenger/platform_info/curl.rb +32 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
- data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
- data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
- data/lib/phusion_passenger/platform_info/linux.rb +55 -55
- data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
- data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
- data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
- data/lib/phusion_passenger/plugin.rb +66 -66
- data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
- data/lib/phusion_passenger/public_api.rb +191 -191
- data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
- data/lib/phusion_passenger/request_handler.rb +567 -577
- data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
- data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
- data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
- data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
- data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
- data/lib/phusion_passenger/standalone/command.rb +44 -40
- data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
- data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
- data/lib/phusion_passenger/standalone/main.rb +73 -73
- data/lib/phusion_passenger/standalone/start_command.rb +697 -685
- data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
- data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
- data/lib/phusion_passenger/standalone/status_command.rb +64 -64
- data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
- data/lib/phusion_passenger/standalone/version_command.rb +9 -9
- data/lib/phusion_passenger/union_station/connection.rb +32 -32
- data/lib/phusion_passenger/union_station/core.rb +251 -251
- data/lib/phusion_passenger/union_station/transaction.rb +126 -126
- data/lib/phusion_passenger/utils.rb +199 -167
- data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
- data/lib/phusion_passenger/utils/download.rb +196 -196
- data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
- data/lib/phusion_passenger/utils/lock.rb +31 -31
- data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
- data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
- data/lib/phusion_passenger/utils/shellwords.rb +20 -20
- data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
- data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
- data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
- data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
- data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
- data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
- data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
- data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
- data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
- data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
- data/passenger.gemspec +0 -1
- data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
- data/resources/templates/standalone/config.erb +19 -15
- data/test/integration_tests/apache2_tests.rb +566 -566
- data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
- data/test/integration_tests/native_packaging_spec.rb +296 -296
- data/test/integration_tests/nginx_tests.rb +393 -393
- data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
- data/test/integration_tests/source_packaging_test.rb +138 -138
- data/test/integration_tests/spec_helper.rb +5 -5
- data/test/integration_tests/standalone_tests.rb +367 -367
- data/test/ruby/debug_logging_spec.rb +133 -133
- data/test/ruby/message_channel_spec.rb +186 -186
- data/test/ruby/rack/loader_spec.rb +28 -28
- data/test/ruby/rack/preloader_spec.rb +34 -34
- data/test/ruby/rails3.0/loader_spec.rb +12 -12
- data/test/ruby/rails3.0/preloader_spec.rb +18 -18
- data/test/ruby/rails3.1/loader_spec.rb +12 -12
- data/test/ruby/rails3.1/preloader_spec.rb +18 -18
- data/test/ruby/rails3.2/loader_spec.rb +12 -12
- data/test/ruby/rails3.2/preloader_spec.rb +18 -18
- data/test/ruby/rails4.0/loader_spec.rb +12 -12
- data/test/ruby/rails4.0/preloader_spec.rb +18 -18
- data/test/ruby/rails4.1/loader_spec.rb +12 -12
- data/test/ruby/rails4.1/preloader_spec.rb +18 -18
- data/test/ruby/request_handler_spec.rb +730 -730
- data/test/ruby/shared/loader_sharedspec.rb +224 -224
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
- data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
- data/test/ruby/spec_helper.rb +65 -65
- data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
- data/test/ruby/union_station_spec.rb +276 -276
- data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
- data/test/ruby/utils/hosts_file_parser.rb +248 -248
- data/test/ruby/utils/tee_input_spec.rb +215 -215
- data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
- data/test/ruby/utils_spec.rb +21 -21
- data/test/stub/rack/config.ru +87 -87
- data/test/stub/rack/library.rb +8 -8
- data/test/stub/rack/start.rb +30 -30
- data/test/support/apache2_controller.rb +191 -191
- data/test/support/nginx_controller.rb +90 -99
- data/test/support/placebo-preloader.rb +57 -57
- data/test/support/test_helper.rb +435 -435
- metadata +11 -21
- metadata.gz.asc +7 -7
- data/lib/phusion_passenger/standalone/command2.rb +0 -292
- data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
- data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
- data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
- data/resources/templates/standalone/run_installer_as_root.txt.erb +0 -8
data/lib/phusion_passenger.rb
CHANGED
@@ -23,299 +23,299 @@
|
|
23
23
|
# THE SOFTWARE.
|
24
24
|
|
25
25
|
module PhusionPassenger
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
26
|
+
FILE_LOCATION = File.expand_path(__FILE__)
|
27
|
+
|
28
|
+
|
29
|
+
###### Names and version numbers ######
|
30
|
+
|
31
|
+
PACKAGE_NAME = 'passenger'
|
32
|
+
# Run 'rake ext/common/Constants.h' after changing this number.
|
33
|
+
VERSION_STRING = '5.0.0.rc1'
|
34
|
+
|
35
|
+
PREFERRED_NGINX_VERSION = '1.6.2'
|
36
|
+
NGINX_SHA256_CHECKSUM = 'b5608c2959d3e7ad09b20fc8f9e5bd4bc87b3bc8ba5936a513c04ed8f1391a18'
|
37
|
+
|
38
|
+
PREFERRED_PCRE_VERSION = '8.34'
|
39
|
+
PCRE_SHA256_CHECKSUM = '1dd78994c81e44ac41cf30b2a21d4b4cc6d76ccde7fc6e77713ed51d7bddca47'
|
40
|
+
|
41
|
+
STANDALONE_INTERFACE_VERSION = 1
|
42
|
+
|
43
|
+
|
44
|
+
###### Directories ######
|
45
|
+
|
46
|
+
GLOBAL_NAMESPACE_DIRNAME_ = "passenger"
|
47
|
+
# Subdirectory under $HOME to use for storing stuff.
|
48
|
+
USER_NAMESPACE_DIRNAME_ = ".passenger"
|
49
|
+
# The name for the /etc/apache2/mods-available/*.{load,conf} file.
|
50
|
+
APACHE2_MODULE_CONF_NAME = "passenger"
|
51
|
+
|
52
|
+
# Directories in which to look for plugins.
|
53
|
+
PLUGIN_DIRS = [
|
54
|
+
"/usr/share/#{GLOBAL_NAMESPACE_DIRNAME_}/plugins",
|
55
|
+
"/usr/local/share/#{GLOBAL_NAMESPACE_DIRNAME_}/plugins",
|
56
|
+
"~/#{USER_NAMESPACE_DIRNAME_}/plugins"
|
57
|
+
]
|
58
|
+
|
59
|
+
REQUIRED_LOCATIONS_INI_FIELDS = [
|
60
|
+
# User-invoked commands
|
61
|
+
:bin_dir,
|
62
|
+
# Support binaries
|
63
|
+
:support_binaries_dir,
|
64
|
+
# Library files like libboost_oxt.a and various .o files
|
65
|
+
:lib_dir,
|
66
|
+
# Scripts not directly invoked by users
|
67
|
+
:helper_scripts_dir,
|
68
|
+
# Various non-executable resources
|
69
|
+
:resources_dir,
|
70
|
+
# C header files, necessary for compiling Nginx
|
71
|
+
:include_dir,
|
72
|
+
# Documentation
|
73
|
+
:doc_dir,
|
74
|
+
# Ruby support libraries
|
75
|
+
:ruby_libdir,
|
76
|
+
# Node.js support libraries
|
77
|
+
:node_libdir,
|
78
|
+
# Path to the compiled Apache module
|
79
|
+
:apache2_module_path,
|
80
|
+
# Directory containing the source code of our Ruby extension
|
81
|
+
:ruby_extension_source_dir,
|
82
|
+
# Directory containing the source code of our Nginx module
|
83
|
+
:nginx_module_source_dir
|
84
|
+
].freeze
|
85
|
+
OPTIONAL_LOCATIONS_INI_FIELDS = [
|
86
|
+
# Directory which contains the main Phusion Passenger Rakefile. Only
|
87
|
+
# available when originally packaged,
|
88
|
+
:build_system_dir,
|
89
|
+
# Directory in which downloaded Phusion Passenger binaries are cached.
|
90
|
+
:download_cache_dir
|
91
|
+
].freeze
|
92
|
+
|
93
|
+
# Follows the logic of ext/common/ResourceLocator.h, so don't forget to modify that too.
|
94
|
+
def self.locate_directories(install_spec = nil)
|
95
|
+
@install_spec = install_spec || infer_install_spec
|
96
|
+
if @install_spec && File.file?(@install_spec)
|
97
|
+
filename = @install_spec
|
98
|
+
options = parse_ini_file(filename)
|
99
|
+
|
100
|
+
@custom_packaged = true
|
101
|
+
@packaging_method = get_option(filename, options, 'packaging_method')
|
102
|
+
REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
|
103
|
+
value = get_option(filename, options, field.to_s)
|
104
|
+
value.freeze unless value.nil?
|
105
|
+
instance_variable_set("@#{field}", value)
|
106
|
+
end
|
107
|
+
OPTIONAL_LOCATIONS_INI_FIELDS.each do |field|
|
108
|
+
value = get_option(filename, options, field.to_s, false)
|
109
|
+
value.freeze unless value.nil?
|
110
|
+
instance_variable_set("@#{field}", value)
|
111
|
+
end
|
112
|
+
else
|
113
|
+
source_root = File.dirname(File.dirname(FILE_LOCATION))
|
114
|
+
@install_spec = source_root
|
115
|
+
@custom_packaged = false
|
116
|
+
@bin_dir = "#{source_root}/bin".freeze
|
117
|
+
@support_binaries_dir = "#{source_root}/buildout/support-binaries".freeze
|
118
|
+
@lib_dir = "#{source_root}/buildout".freeze
|
119
|
+
@helper_scripts_dir = "#{source_root}/helper-scripts".freeze
|
120
|
+
@resources_dir = "#{source_root}/resources".freeze
|
121
|
+
@include_dir = "#{source_root}/ext".freeze
|
122
|
+
@doc_dir = "#{source_root}/doc".freeze
|
123
|
+
@ruby_libdir = File.dirname(FILE_LOCATION).freeze
|
124
|
+
@node_libdir = "#{source_root}/node_lib".freeze
|
125
|
+
@apache2_module_path = "#{source_root}/buildout/apache2/mod_passenger.so".freeze
|
126
|
+
@ruby_extension_source_dir = "#{source_root}/ext/ruby".freeze
|
127
|
+
@nginx_module_source_dir = "#{source_root}/ext/nginx".freeze
|
128
|
+
@download_cache_dir = "#{source_root}/download_cache".freeze
|
129
|
+
@build_system_dir = source_root.dup.freeze
|
130
|
+
REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
|
131
|
+
if instance_variable_get("@#{field}").nil?
|
132
|
+
raise "BUG: @#{field} not set"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# Returns whether this Phusion Passenger installation is in the 'originally packaged'
|
139
|
+
# configuration (as opposed to the 'custom packaged' configuration.
|
140
|
+
def self.originally_packaged?
|
141
|
+
return !@custom_packaged
|
142
|
+
end
|
143
|
+
|
144
|
+
def self.custom_packaged?
|
145
|
+
return @custom_packaged
|
146
|
+
end
|
147
|
+
|
148
|
+
# If Phusion Passenger is custom packaged, returns which packaging
|
149
|
+
# method was used. Can be 'deb', 'rpm', 'homebrew', 'test'
|
150
|
+
# or 'unknown'.
|
151
|
+
def self.packaging_method
|
152
|
+
return @custom_packaging_method
|
153
|
+
end
|
154
|
+
|
155
|
+
# Whether the current Phusion Passenger installation is installed
|
156
|
+
# from a release package, e.g. an official gem or official tarball.
|
157
|
+
# Retruns false if e.g. the gem was built by the user, or if this
|
158
|
+
# install is from a git repository.
|
159
|
+
def self.installed_from_release_package?
|
160
|
+
File.exist?("#{resources_dir}/release.txt")
|
161
|
+
end
|
162
|
+
|
163
|
+
# The installation specification string, as passed to #locate_directories.
|
164
|
+
def self.install_spec
|
165
|
+
return @install_spec
|
166
|
+
end
|
167
|
+
|
168
|
+
# Generate getters for the directory types in locations.ini.
|
169
|
+
getters_code = ""
|
170
|
+
(REQUIRED_LOCATIONS_INI_FIELDS + OPTIONAL_LOCATIONS_INI_FIELDS).each do |field|
|
171
|
+
getters_code << %Q{
|
172
|
+
def self.#{field}
|
173
|
+
return @#{field}
|
174
|
+
end
|
175
|
+
}
|
176
|
+
end
|
177
|
+
eval(getters_code, binding, __FILE__, __LINE__)
|
178
|
+
|
179
|
+
def self.user_support_binaries_dir
|
180
|
+
return "#{home_dir}/#{USER_NAMESPACE_DIRNAME_}/support-binaries/#{VERSION_STRING}"
|
181
|
+
end
|
182
|
+
|
183
|
+
def self.find_support_binary(name)
|
184
|
+
all_support_binary_dirs = [
|
185
|
+
support_binaries_dir,
|
186
|
+
user_support_binaries_dir
|
187
|
+
]
|
188
|
+
all_support_binary_dirs.each do |dir|
|
189
|
+
result = "#{dir}/#{name}"
|
190
|
+
if File.exist?(result)
|
191
|
+
return result
|
192
|
+
end
|
193
|
+
end
|
194
|
+
return nil
|
195
|
+
end
|
196
|
+
|
197
|
+
def self.index_doc_path
|
198
|
+
return "#{doc_dir}/#{INDEX_DOC_NAME}"
|
199
|
+
end
|
200
|
+
|
201
|
+
def self.apache2_doc_path
|
202
|
+
return "#{doc_dir}/#{APACHE2_DOC_NAME}"
|
203
|
+
end
|
204
|
+
|
205
|
+
def self.nginx_doc_path
|
206
|
+
return "#{doc_dir}/#{NGINX_DOC_NAME}"
|
207
|
+
end
|
208
|
+
|
209
|
+
def self.standalone_doc_path
|
210
|
+
return "#{doc_dir}/#{STANDALONE_DOC_NAME}"
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
###### Other resource locations ######
|
215
|
+
|
216
|
+
INDEX_DOC_NAME = "Users guide.html".freeze
|
217
|
+
APACHE2_DOC_NAME = "Users guide Apache.html".freeze
|
218
|
+
NGINX_DOC_NAME = "Users guide Nginx.html".freeze
|
219
|
+
STANDALONE_DOC_NAME = "Users guide Standalone.html".freeze
|
220
|
+
|
221
|
+
def self.binaries_sites
|
222
|
+
return [
|
223
|
+
{ :url => "https://oss-binaries.phusionpassenger.com/binaries/passenger/by_release".freeze,
|
224
|
+
:cacert => "#{resources_dir}/oss-binaries.phusionpassenger.com.crt".freeze },
|
225
|
+
{ :url => "https://s3.amazonaws.com/phusion-passenger/binaries/passenger/by_release".freeze }
|
226
|
+
]
|
227
|
+
end
|
228
|
+
|
229
|
+
|
230
|
+
# Instead of calling `require 'phusion_passenger/foo'`, you should call
|
231
|
+
# `PhusionPassenger.require_passenger_lib 'foo'`. This is because when Phusion
|
232
|
+
# Passenger is natively packaged, it may still be run with arbitrary Ruby
|
233
|
+
# interpreters. Adding ruby_libdir to $LOAD_PATH is then dangerous because ruby_libdir
|
234
|
+
# may be the distribution's Ruby's vendor_ruby directory, which may be incompatible
|
235
|
+
# with the active Ruby interpreter. This method looks up the exact filename directly.
|
236
|
+
#
|
237
|
+
# Using this method also has two more advantages:
|
238
|
+
#
|
239
|
+
# 1. It is immune to Bundler's load path mangling code.
|
240
|
+
# 2. It is faster than plan require() because it doesn't need to
|
241
|
+
# scan the entire load path.
|
242
|
+
def self.require_passenger_lib(name)
|
243
|
+
require("#{ruby_libdir}/phusion_passenger/#{name}")
|
244
|
+
end
|
245
245
|
|
246
246
|
|
247
247
|
private
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
248
|
+
def self.infer_install_spec
|
249
|
+
filename = ENV['PASSENGER_LOCATION_CONFIGURATION_FILE']
|
250
|
+
return filename if filename && !filename.empty?
|
251
|
+
|
252
|
+
filename = File.dirname(FILE_LOCATION) + "/phusion_passenger/locations.ini"
|
253
|
+
return filename if filename && File.exist?(filename)
|
254
|
+
|
255
|
+
require 'etc' if !defined?(Etc)
|
256
|
+
begin
|
257
|
+
home_dir = Etc.getpwuid(Process.uid).dir
|
258
|
+
rescue ArgumentError
|
259
|
+
# Unknown user.
|
260
|
+
home_dir = ENV['HOME']
|
261
|
+
end
|
262
|
+
if home_dir && !home_dir.empty?
|
263
|
+
filename = "#{home_dir}/#{USER_NAMESPACE_DIRNAME_}/locations.ini"
|
264
|
+
return filename if File.exist?(filename)
|
265
|
+
end
|
266
|
+
|
267
|
+
filename = "/etc/#{GLOBAL_NAMESPACE_DIRNAME_}/locations.ini"
|
268
|
+
return filename if File.exist?(filename)
|
269
|
+
|
270
|
+
return nil
|
271
|
+
end
|
272
|
+
|
273
|
+
def self.parse_ini_file(filename)
|
274
|
+
options = {}
|
275
|
+
in_locations_section = false
|
276
|
+
File.open(filename, 'r') do |f|
|
277
|
+
while !f.eof?
|
278
|
+
line = f.readline
|
279
|
+
line.strip!
|
280
|
+
next if line.empty?
|
281
|
+
if line =~ /\A\[(.+)\]\Z/
|
282
|
+
in_locations_section = $1 == 'locations'
|
283
|
+
elsif in_locations_section && line =~ /=/
|
284
|
+
key, value = line.split(/ *= */, 2)
|
285
|
+
options[key.freeze] = value.freeze
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
return options
|
290
|
+
end
|
291
|
+
|
292
|
+
def self.get_option(filename, options, key, required = true)
|
293
|
+
value = options[key]
|
294
|
+
if value
|
295
|
+
return value
|
296
|
+
elsif required
|
297
|
+
raise "Option '#{key}' missing in file '#{filename}'"
|
298
|
+
else
|
299
|
+
return nil
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def self.get_bool_option(filename, options, key)
|
304
|
+
value = get_option(filename, options, key)
|
305
|
+
return value == 'yes' || value == 'true' || value == 'on' || value == '1'
|
306
|
+
end
|
307
|
+
|
308
|
+
# The HOME environment variable is often unreliable, because for
|
309
|
+
# example `sudo` preserves it. That's why we don't respect it by
|
310
|
+
# default.
|
311
|
+
def self.home_dir(respect_home_env = false)
|
312
|
+
if respect_home_env
|
313
|
+
home = ENV['HOME'].to_s
|
314
|
+
end
|
315
|
+
if home.nil? || home.empty?
|
316
|
+
require 'etc' if !defined?(Etc)
|
317
|
+
home = Etc.getpwuid(Process.uid).dir
|
318
|
+
end
|
319
|
+
return home
|
320
|
+
end
|
321
321
|
end if !defined?(PhusionPassenger::VERSION_STRING)
|