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.

Files changed (218) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +11 -5
  5. data/CHANGELOG +38 -0
  6. data/CONTRIBUTING.md +1 -4
  7. data/Gemfile +0 -1
  8. data/Gemfile.lock +0 -2
  9. data/Rakefile +33 -33
  10. data/bin/passenger +1 -1
  11. data/bin/passenger-config +1 -1
  12. data/bin/passenger-install-apache2-module +800 -800
  13. data/bin/passenger-install-nginx-module +592 -592
  14. data/bin/passenger-memory-stats +127 -127
  15. data/bin/passenger-status +216 -216
  16. data/build/agents.rb +127 -127
  17. data/build/apache2.rb +87 -87
  18. data/build/basics.rb +60 -60
  19. data/build/common_library.rb +165 -165
  20. data/build/cplusplus_support.rb +51 -51
  21. data/build/cxx_tests.rb +268 -268
  22. data/build/debian.rb +143 -143
  23. data/build/documentation.rb +58 -58
  24. data/build/integration_tests.rb +81 -81
  25. data/build/misc.rb +132 -132
  26. data/build/nginx.rb +20 -20
  27. data/build/node_tests.rb +7 -7
  28. data/build/oxt_tests.rb +14 -14
  29. data/build/packaging.rb +570 -570
  30. data/build/preprocessor.rb +260 -260
  31. data/build/rake_extensions.rb +71 -71
  32. data/build/ruby_extension.rb +29 -29
  33. data/build/ruby_tests.rb +6 -6
  34. data/build/test_basics.rb +37 -37
  35. data/debian.template/control.template +3 -5
  36. data/dev/copy_boost_headers +134 -134
  37. data/dev/install_scripts_bootstrap_code.rb +25 -25
  38. data/dev/list_tests +20 -20
  39. data/dev/ruby_server.rb +223 -223
  40. data/dev/runner +18 -18
  41. data/doc/ServerOptimizationGuide.txt.md +55 -2
  42. data/doc/Users guide Nginx.txt +0 -26
  43. data/doc/Users guide Standalone.txt +5 -1
  44. data/doc/users_guide_snippets/tips.txt +9 -0
  45. data/ext/common/ApplicationPool2/Group.h +23 -11
  46. data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
  47. data/ext/common/ApplicationPool2/Pool.h +22 -17
  48. data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
  49. data/ext/common/ApplicationPool2/Spawner.h +1 -1
  50. data/ext/common/Constants.h +1 -1
  51. data/ext/common/agents/Base.cpp +35 -20
  52. data/ext/common/agents/HelperAgent/Main.cpp +8 -1
  53. data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
  54. data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
  55. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
  56. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
  57. data/ext/common/agents/Main.cpp +1 -1
  58. data/ext/common/agents/Watchdog/Main.cpp +54 -19
  59. data/ext/nginx/Configuration.c +7 -0
  60. data/ext/nginx/ContentHandler.c +9 -1
  61. data/helper-scripts/backtrace-sanitizer.rb +106 -87
  62. data/helper-scripts/crash-watch.rb +32 -0
  63. data/helper-scripts/download_binaries/extconf.rb +38 -38
  64. data/helper-scripts/meteor-loader.rb +107 -107
  65. data/helper-scripts/prespawn +101 -101
  66. data/helper-scripts/rack-loader.rb +96 -96
  67. data/helper-scripts/rack-preloader.rb +137 -137
  68. data/lib/phusion_passenger.rb +292 -292
  69. data/lib/phusion_passenger/abstract_installer.rb +438 -438
  70. data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
  71. data/lib/phusion_passenger/admin_tools.rb +20 -20
  72. data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
  73. data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
  74. data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
  75. data/lib/phusion_passenger/apache2/config_options.rb +182 -182
  76. data/lib/phusion_passenger/common_library.rb +479 -485
  77. data/lib/phusion_passenger/config/about_command.rb +161 -161
  78. data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
  79. data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
  80. data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
  81. data/lib/phusion_passenger/config/command.rb +25 -25
  82. data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
  83. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
  84. data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
  85. data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
  86. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
  87. data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
  88. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
  89. data/lib/phusion_passenger/config/installation_utils.rb +204 -204
  90. data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
  91. data/lib/phusion_passenger/config/main.rb +152 -152
  92. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
  93. data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
  94. data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
  95. data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
  96. data/lib/phusion_passenger/config/utils.rb +95 -95
  97. data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
  98. data/lib/phusion_passenger/console_text_template.rb +25 -25
  99. data/lib/phusion_passenger/constants.rb +90 -90
  100. data/lib/phusion_passenger/debug_logging.rb +106 -106
  101. data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
  102. data/lib/phusion_passenger/message_channel.rb +312 -312
  103. data/lib/phusion_passenger/message_client.rb +176 -176
  104. data/lib/phusion_passenger/native_support.rb +369 -369
  105. data/lib/phusion_passenger/nginx/config_options.rb +297 -297
  106. data/lib/phusion_passenger/packaging.rb +131 -131
  107. data/lib/phusion_passenger/platform_info.rb +360 -360
  108. data/lib/phusion_passenger/platform_info/apache.rb +767 -767
  109. data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
  110. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
  111. data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
  112. data/lib/phusion_passenger/platform_info/curl.rb +32 -32
  113. data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
  114. data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
  115. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
  116. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  117. data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
  118. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
  119. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
  120. data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
  121. data/lib/phusion_passenger/platform_info/linux.rb +55 -55
  122. data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
  123. data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
  124. data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
  125. data/lib/phusion_passenger/plugin.rb +66 -66
  126. data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
  127. data/lib/phusion_passenger/public_api.rb +191 -191
  128. data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
  129. data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
  130. data/lib/phusion_passenger/request_handler.rb +567 -577
  131. data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
  132. data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
  133. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
  134. data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
  135. data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
  136. data/lib/phusion_passenger/standalone/command.rb +44 -40
  137. data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
  138. data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
  139. data/lib/phusion_passenger/standalone/main.rb +73 -73
  140. data/lib/phusion_passenger/standalone/start_command.rb +697 -685
  141. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
  142. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
  143. data/lib/phusion_passenger/standalone/status_command.rb +64 -64
  144. data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
  145. data/lib/phusion_passenger/standalone/version_command.rb +9 -9
  146. data/lib/phusion_passenger/union_station/connection.rb +32 -32
  147. data/lib/phusion_passenger/union_station/core.rb +251 -251
  148. data/lib/phusion_passenger/union_station/transaction.rb +126 -126
  149. data/lib/phusion_passenger/utils.rb +199 -167
  150. data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
  151. data/lib/phusion_passenger/utils/download.rb +196 -196
  152. data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
  153. data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
  154. data/lib/phusion_passenger/utils/lock.rb +31 -31
  155. data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
  156. data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
  157. data/lib/phusion_passenger/utils/shellwords.rb +20 -20
  158. data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
  159. data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
  160. data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
  161. data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
  162. data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
  163. data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
  164. data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
  165. data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
  166. data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
  167. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
  168. data/passenger.gemspec +0 -1
  169. data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
  170. data/resources/templates/standalone/config.erb +19 -15
  171. data/test/integration_tests/apache2_tests.rb +566 -566
  172. data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
  173. data/test/integration_tests/native_packaging_spec.rb +296 -296
  174. data/test/integration_tests/nginx_tests.rb +393 -393
  175. data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
  176. data/test/integration_tests/source_packaging_test.rb +138 -138
  177. data/test/integration_tests/spec_helper.rb +5 -5
  178. data/test/integration_tests/standalone_tests.rb +367 -367
  179. data/test/ruby/debug_logging_spec.rb +133 -133
  180. data/test/ruby/message_channel_spec.rb +186 -186
  181. data/test/ruby/rack/loader_spec.rb +28 -28
  182. data/test/ruby/rack/preloader_spec.rb +34 -34
  183. data/test/ruby/rails3.0/loader_spec.rb +12 -12
  184. data/test/ruby/rails3.0/preloader_spec.rb +18 -18
  185. data/test/ruby/rails3.1/loader_spec.rb +12 -12
  186. data/test/ruby/rails3.1/preloader_spec.rb +18 -18
  187. data/test/ruby/rails3.2/loader_spec.rb +12 -12
  188. data/test/ruby/rails3.2/preloader_spec.rb +18 -18
  189. data/test/ruby/rails4.0/loader_spec.rb +12 -12
  190. data/test/ruby/rails4.0/preloader_spec.rb +18 -18
  191. data/test/ruby/rails4.1/loader_spec.rb +12 -12
  192. data/test/ruby/rails4.1/preloader_spec.rb +18 -18
  193. data/test/ruby/request_handler_spec.rb +730 -730
  194. data/test/ruby/shared/loader_sharedspec.rb +224 -224
  195. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
  196. data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
  197. data/test/ruby/spec_helper.rb +65 -65
  198. data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
  199. data/test/ruby/union_station_spec.rb +276 -276
  200. data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
  201. data/test/ruby/utils/hosts_file_parser.rb +248 -248
  202. data/test/ruby/utils/tee_input_spec.rb +215 -215
  203. data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
  204. data/test/ruby/utils_spec.rb +21 -21
  205. data/test/stub/rack/config.ru +87 -87
  206. data/test/stub/rack/library.rb +8 -8
  207. data/test/stub/rack/start.rb +30 -30
  208. data/test/support/apache2_controller.rb +191 -191
  209. data/test/support/nginx_controller.rb +90 -99
  210. data/test/support/placebo-preloader.rb +57 -57
  211. data/test/support/test_helper.rb +435 -435
  212. metadata +11 -21
  213. metadata.gz.asc +7 -7
  214. data/lib/phusion_passenger/standalone/command2.rb +0 -292
  215. data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
  216. data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
  217. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
  218. data/resources/templates/standalone/run_installer_as_root.txt.erb +0 -8
@@ -1,5 +1,5 @@
1
1
  # Phusion Passenger - https://www.phusionpassenger.com/
2
- # Copyright (c) 2014 Phusion
2
+ # Copyright (c) 2014-2015 Phusion
3
3
  #
4
4
  # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
5
5
  #
@@ -34,248 +34,269 @@ PhusionPassenger.require_passenger_lib 'utils/shellwords'
34
34
  PhusionPassenger.require_passenger_lib 'utils/tmpio'
35
35
 
36
36
  module PhusionPassenger
37
- module Config
37
+ module Config
38
38
 
39
- class DownloadNginxEngineCommand < Command
40
- include InstallationUtils
39
+ class DownloadNginxEngineCommand < Command
40
+ include InstallationUtils
41
41
 
42
- BINARY_NOT_USABLE_EXIT_CODE = 3
42
+ BINARY_NOT_USABLE_EXIT_CODE = 3
43
43
 
44
- def run
45
- @options = {
46
- :log_level => Logger::INFO,
47
- :colors => :auto,
48
- :error_colors => true,
49
- :show_download_progress => STDOUT.tty?,
50
- :compilation_tip => true,
51
- :force_tip => true,
52
- :use_cache => true
53
- }
54
- parse_options
55
- initialize_objects
56
- sanity_check
57
- download_and_extract
58
- end
44
+ def run
45
+ @options = {
46
+ :log_level => Logger::INFO,
47
+ :colors => :auto,
48
+ :error_colors => true,
49
+ :show_download_progress => STDOUT.tty?,
50
+ :compilation_tip => true,
51
+ :force_tip => true,
52
+ :use_cache => true,
53
+ :connect_timeout => 30,
54
+ :idle_timeout => 30
55
+ }
56
+ parse_options
57
+ initialize_objects
58
+ sanity_check
59
+ download_and_extract
60
+ end
59
61
 
60
- private
61
- def self.create_option_parser(options)
62
- OptionParser.new do |opts|
63
- nl = "\n" + ' ' * 37
64
- opts.banner = "Usage: passenger-config download-nginx-engine [OPTIONS]\n"
65
- opts.separator ""
66
- opts.separator " Download an Nginx #{PREFERRED_NGINX_VERSION} engine " +
67
- "from the #{PROGRAM_NAME} website,"
68
- opts.separator " for use with #{PROGRAM_NAME} Standalone. Precompiled engines are only"
69
- opts.separator " available for Linux and OS X."
70
- opts.separator ""
71
- opts.separator " It is not possible to customize the Nginx engine version. " +
72
- "It must be #{PREFERRED_NGINX_VERSION}."
73
- opts.separator ""
62
+ private
63
+ def self.create_option_parser(options)
64
+ OptionParser.new do |opts|
65
+ nl = "\n" + ' ' * 37
66
+ opts.banner = "Usage: passenger-config download-nginx-engine [OPTIONS]\n"
67
+ opts.separator ""
68
+ opts.separator " Download an Nginx #{PREFERRED_NGINX_VERSION} engine " +
69
+ "from the #{PROGRAM_NAME} website,"
70
+ opts.separator " for use with #{PROGRAM_NAME} Standalone. Precompiled engines are only"
71
+ opts.separator " available for Linux and OS X."
72
+ opts.separator ""
73
+ opts.separator " It is not possible to customize the Nginx engine version. " +
74
+ "It must be #{PREFERRED_NGINX_VERSION}."
75
+ opts.separator ""
74
76
 
75
- opts.separator "Options:"
76
- opts.on("--url-root URL", String, "Download the engine from a custom URL") do |value|
77
- options[:url_root] = value
78
- end
79
- opts.on("--log-prefix PREFIX", String, "Prefix all logs with the given string") do |value|
80
- options[:log_prefix] = value
81
- end
82
- opts.on("--log-level LEVEL", String, "Set log level (fatal,error,warn,info,#{nl}" +
83
- "debug). Default: info") do |value|
84
- case value
85
- when "fatal"
86
- options[:log_level] = Logger::FATAL
87
- when "error"
88
- options[:log_level] = Logger::ERROR
89
- when "warn"
90
- options[:log_level] = Logger::WARN
91
- when "info"
92
- options[:log_level] = Logger::INFO
93
- when "debug"
94
- options[:log_level] = Logger::DEBUG
95
- else
96
- abort "Invalid log level #{value.inspect}"
97
- end
98
- end
99
- opts.on("-f", "--force", "Skip sanity checks") do
100
- options[:force] = true
101
- end
102
- opts.on("--no-colors", "Never output colors") do
103
- options[:colors] = false
104
- end
105
- opts.on("--no-error-colors", "Do not colorized error messages") do
106
- options[:error_colors] = false
107
- end
108
- opts.on("--no-download-progress", "Never show download progress") do
109
- options[:show_download_progress] = false
110
- end
111
- opts.on("--no-compilation-tip", "Do not present compilation as an#{nl}" +
112
- "alternative way to install the agent") do
113
- options[:compilation_tip] = false
114
- end
115
- opts.on("--no-force-tip", "Do not print any tips regarding the --force parameter") do
116
- options[:force_tip] = false
117
- end
118
- opts.on("--skip-cache", "Do not copy the Nginx engine from cache") do
119
- options[:use_cache] = false
120
- end
121
- opts.on("--suppress-binary-unusable-message",
122
- "Do not print anything if the downloaded binary turns out to be unusable") do
123
- options[:suppress_binary_unusable_message] = true
124
- end
125
- opts.on("--dry-run", "Do everything except actually installing#{nl}" +
126
- "the engine") do
127
- options[:dry_run] = true
128
- end
129
- opts.on("-h", "--help", "Show this help") do
130
- options[:help] = true
131
- end
132
- end
133
- end
77
+ opts.separator "Options:"
78
+ opts.on("--url-root URL", String, "Download the engine from a custom URL") do |value|
79
+ options[:url_root] = value
80
+ end
81
+ opts.on("--log-prefix PREFIX", String, "Prefix all logs with the given string") do |value|
82
+ options[:log_prefix] = value
83
+ end
84
+ opts.on("--log-level LEVEL", String, "Set log level (fatal,error,warn,info,#{nl}" +
85
+ "debug). Default: info") do |value|
86
+ case value
87
+ when "fatal"
88
+ options[:log_level] = Logger::FATAL
89
+ when "error"
90
+ options[:log_level] = Logger::ERROR
91
+ when "warn"
92
+ options[:log_level] = Logger::WARN
93
+ when "info"
94
+ options[:log_level] = Logger::INFO
95
+ when "debug"
96
+ options[:log_level] = Logger::DEBUG
97
+ else
98
+ abort "Invalid log level #{value.inspect}"
99
+ end
100
+ end
101
+ opts.on("-f", "--force", "Skip sanity checks") do
102
+ options[:force] = true
103
+ end
104
+ opts.on("--no-colors", "Never output colors") do
105
+ options[:colors] = false
106
+ end
107
+ opts.on("--no-error-colors", "Do not colorized error messages") do
108
+ options[:error_colors] = false
109
+ end
110
+ opts.on("--no-download-progress", "Never show download progress") do
111
+ options[:show_download_progress] = false
112
+ end
113
+ opts.on("--no-compilation-tip", "Do not present compilation as an#{nl}" +
114
+ "alternative way to install the agent") do
115
+ options[:compilation_tip] = false
116
+ end
117
+ opts.on("--no-force-tip", "Do not print any tips regarding the#{nl}" +
118
+ "--force parameter") do
119
+ options[:force_tip] = false
120
+ end
121
+ opts.on("--skip-cache", "Do not copy the Nginx engine from cache") do
122
+ options[:use_cache] = false
123
+ end
124
+ opts.on("--suppress-binary-unusable-message",
125
+ "Do not print anything if the downloaded#{nl}" +
126
+ "binary turns out to be unusable") do
127
+ options[:suppress_binary_unusable_message] = true
128
+ end
129
+ opts.on("--dry-run", "Do everything except actually installing#{nl}" +
130
+ "the engine") do
131
+ options[:dry_run] = true
132
+ end
133
+ opts.on("--connect-timeout SECONDS", Integer,
134
+ "The maximum amount of time to spend on DNS#{nl}" +
135
+ "lookup and establishing the TCP connection.#{nl}" +
136
+ "Default: 30") do |val|
137
+ options[:connect_timeout] = val
138
+ end
139
+ opts.on("--idle-timeout SECONDS", Integer, "The maximum idle read time. Default: 30") do |val|
140
+ options[:idle_timeout] = val
141
+ end
142
+ opts.on("-h", "--help", "Show this help") do
143
+ options[:help] = true
144
+ end
145
+ end
146
+ end
134
147
 
135
- def help
136
- puts @parser
137
- end
148
+ def help
149
+ puts @parser
150
+ end
138
151
 
139
- def initialize_objects
140
- if @options[:url_root]
141
- @sites = [{ :url => @options[:url_root] }]
142
- else
143
- @sites = PhusionPassenger.binaries_sites
144
- end
145
- @colors = Utils::AnsiColors.new(@options[:colors])
146
- @logger = Logger.new(STDOUT)
147
- @logger.level = @options[:log_level]
148
- @logger.formatter = proc do |severity, datetime, progname, msg|
149
- if @options[:error_colors] && (severity == "FATAL" || severity == "ERROR")
150
- color = @colors.red
151
- else
152
- color = nil
153
- end
154
- result = ""
155
- msg.split("\n", -1).map do |line|
156
- result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
157
- end
158
- result
159
- end
160
- end
152
+ def initialize_objects
153
+ if @options[:url_root]
154
+ @sites = [{ :url => @options[:url_root] }]
155
+ else
156
+ @sites = PhusionPassenger.binaries_sites
157
+ end
158
+ @colors = Utils::AnsiColors.new(@options[:colors])
159
+ @logger = Logger.new(STDOUT)
160
+ @logger.level = @options[:log_level]
161
+ @logger.formatter = proc do |severity, datetime, progname, msg|
162
+ if @options[:error_colors] && (severity == "FATAL" || severity == "ERROR")
163
+ color = @colors.red
164
+ else
165
+ color = nil
166
+ end
167
+ result = ""
168
+ msg.split("\n", -1).map do |line|
169
+ result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
170
+ end
171
+ result
172
+ end
173
+ end
161
174
 
162
- def sanity_check
163
- return if @options[:force]
175
+ def sanity_check
176
+ return if @options[:force]
164
177
 
165
- if PhusionPassenger.find_support_binary("nginx-#{PREFERRED_NGINX_VERSION}")
166
- @logger.warn "#{@colors.green}The Nginx engine (version #{PREFERRED_NGINX_VERSION}) is already installed."
167
- if @options[:force_tip]
168
- @logger.warn "If you want to redownload it, re-run this program with the --force parameter."
169
- end
170
- exit
171
- end
178
+ if PhusionPassenger.find_support_binary("nginx-#{PREFERRED_NGINX_VERSION}")
179
+ @logger.warn "#{@colors.green}The Nginx engine (version #{PREFERRED_NGINX_VERSION}) is already installed."
180
+ if @options[:force_tip]
181
+ @logger.warn "If you want to redownload it, re-run this program with the --force parameter."
182
+ end
183
+ exit
184
+ end
172
185
 
173
- if !PhusionPassenger.installed_from_release_package?
174
- @logger.fatal("#{PROGRAM_NAME} was not installed from an official release " +
175
- "package, so you cannot download our precompiled Nginx engine." +
176
- compile_tip_message)
177
- if @options[:force_tip]
178
- @logger.warn "If you want to download it anyway, re-run this program with the --force parameter."
179
- end
180
- abort
181
- end
186
+ if !PhusionPassenger.installed_from_release_package?
187
+ @logger.fatal("#{PROGRAM_NAME} was not installed from an official release " +
188
+ "package, so you cannot download our precompiled Nginx engine." +
189
+ compile_tip_message)
190
+ if @options[:force_tip]
191
+ @logger.warn "If you want to download it anyway, re-run this program with the --force parameter."
192
+ end
193
+ abort
194
+ end
182
195
 
183
- check_for_download_tool!
184
- end
196
+ check_for_download_tool!
197
+ end
185
198
 
186
- def download_and_extract
187
- destdir = find_or_create_writable_support_binaries_dir!
188
- exit if @options[:dry_run]
199
+ def download_and_extract
200
+ destdir = find_or_create_writable_support_binaries_dir!
201
+ exit if @options[:dry_run]
189
202
 
190
- PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir) do |tmpdir|
191
- basename = "nginx-#{PREFERRED_NGINX_VERSION}-#{PlatformInfo.cxx_binary_compatibility_id}.tar.gz"
192
- tarball = "#{tmpdir}/#{basename}"
193
- if !download_support_file(basename, tarball)
194
- @logger.error "#{@colors.reset}------------------------------------------"
195
- @logger.fatal("Sorry, no precompiled Nginx #{PREFERRED_NGINX_VERSION} engine is available for " +
196
- "your platform." + compile_tip_message)
197
- abort
198
- end
203
+ PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir) do |tmpdir|
204
+ basename = "nginx-#{PREFERRED_NGINX_VERSION}-#{PlatformInfo.cxx_binary_compatibility_id}.tar.gz"
205
+ tarball = "#{tmpdir}/#{basename}"
206
+ if !download_support_file(basename, tarball)
207
+ @logger.error "#{@colors.reset}------------------------------------------"
208
+ @logger.fatal("Sorry, no precompiled Nginx #{PREFERRED_NGINX_VERSION} engine is available for " +
209
+ "your platform." + compile_tip_message)
210
+ abort
211
+ end
199
212
 
200
- @logger.info "Extracting precompiled Nginx #{PREFERRED_NGINX_VERSION} engine to #{destdir}"
201
- e_tmpdir = Shellwords.escape(tmpdir)
202
- e_tarball = Shellwords.escape(tarball)
203
- if !system("cd #{e_tmpdir} && tar xzf #{e_tarball}")
204
- @logger.fatal "The downloaded archive file could not be extracted."
205
- abort
206
- end
207
- if !File.exist?("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}")
208
- @logger.fatal "The downloaded archive file does not seem to " +
209
- "contain an Nginx #{PREFERRED_NGINX_VERSION} engine. This is probably " +
210
- "a problem in the #{PROGRAM_NAME} website. Please report this problem to " +
211
- "the #{PROGRAM_NAME} authors."
212
- abort
213
- end
213
+ @logger.info "Extracting precompiled Nginx #{PREFERRED_NGINX_VERSION} engine to #{destdir}"
214
+ e_tmpdir = Shellwords.escape(tmpdir)
215
+ e_tarball = Shellwords.escape(tarball)
216
+ if !system("cd #{e_tmpdir} && tar xzf #{e_tarball}")
217
+ @logger.fatal "The downloaded archive file could not be extracted."
218
+ abort
219
+ end
220
+ if !File.exist?("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}")
221
+ @logger.fatal "The downloaded archive file does not seem to " +
222
+ "contain an Nginx #{PREFERRED_NGINX_VERSION} engine. This is probably " +
223
+ "a problem in the #{PROGRAM_NAME} website. Please report this problem to " +
224
+ "the #{PROGRAM_NAME} authors."
225
+ abort
226
+ end
214
227
 
215
- @logger.info "Checking whether the downloaded engine is usable..."
216
- if test_binary("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}")
217
- @logger.info "The downloaded engine is usable."
218
- else
219
- if !@options[:suppress_binary_unusable_message]
220
- @logger.fatal "Sorry, the precompiled Nginx engine can not be run " +
221
- "your system.#{compile_tip_message}"
222
- end
223
- exit(BINARY_NOT_USABLE_EXIT_CODE)
224
- end
228
+ @logger.info "Checking whether the downloaded engine is usable..."
229
+ if test_binary("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}")
230
+ @logger.info "The downloaded engine is usable."
231
+ else
232
+ if !@options[:suppress_binary_unusable_message]
233
+ @logger.fatal "Sorry, the precompiled Nginx engine can not be run " +
234
+ "your system.#{compile_tip_message}"
235
+ end
236
+ exit(BINARY_NOT_USABLE_EXIT_CODE)
237
+ end
225
238
 
226
- FileUtils.mv("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}",
227
- "#{destdir}/nginx-#{PREFERRED_NGINX_VERSION}")
228
- @logger.info "#{@colors.green}Nginx #{PREFERRED_NGINX_VERSION} engine successfully download and installed."
229
- end
230
- end
239
+ FileUtils.mv("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}",
240
+ "#{destdir}/nginx-#{PREFERRED_NGINX_VERSION}")
241
+ @logger.info "#{@colors.green}Nginx #{PREFERRED_NGINX_VERSION} engine successfully download and installed."
242
+ end
243
+ end
231
244
 
232
- def download_support_file(name, output)
233
- @sites.each_with_index do |site, i|
234
- if real_download_support_file(site, name, output)
235
- if i > 0
236
- @logger.warn "#{@colors.green}Download OK!"
237
- else
238
- @logger.info "#{@colors.green}Download OK!"
239
- end
240
- return true
241
- elsif i != @sites.size - 1
242
- @logger.warn "Trying next mirror..."
243
- end
244
- end
245
- return false
246
- end
245
+ def download_support_file(name, output)
246
+ @sites.each_with_index do |site, i|
247
+ if real_download_support_file(site, name, output)
248
+ if i > 0
249
+ @logger.warn "#{@colors.green}Download OK!"
250
+ else
251
+ @logger.info "#{@colors.green}Download OK!"
252
+ end
253
+ return true
254
+ elsif i != @sites.size - 1
255
+ @logger.warn "Trying next mirror..."
256
+ end
257
+ end
258
+ return false
259
+ end
247
260
 
248
- def real_download_support_file(site, name, output)
249
- url = "#{site[:url]}/#{VERSION_STRING}/#{name}"
250
- return PhusionPassenger::Utils::Download.download(url, output,
251
- :cacert => site[:cacert],
252
- :logger => @logger,
253
- :use_cache => @options[:use_cache],
254
- :show_progress => @options[:show_download_progress],
255
- :connect_timeout => 30,
256
- :idle_timeout => 30)
257
- end
261
+ def real_download_support_file(site, name, output)
262
+ url = "#{site[:url]}/#{VERSION_STRING}/#{name}"
263
+ options = {
264
+ :cacert => site[:cacert],
265
+ :logger => @logger,
266
+ :use_cache => @options[:use_cache],
267
+ :show_progress => @options[:show_download_progress]
268
+ }
269
+ # connect_timeout and idle_timeout may be nil or 0, which means
270
+ # that the default Utils::Download timeouts should be used.
271
+ if @options[:connect_timeout] && @options[:connect_timeout] != 0
272
+ options[:connect_timeout] = @options[:connect_timeout]
273
+ end
274
+ if @options[:idle_timeout] && @options[:idle_timeout] != 0
275
+ options[:idle_timeout] = @options[:idle_timeout]
276
+ end
277
+ return PhusionPassenger::Utils::Download.download(url, output, options)
278
+ end
258
279
 
259
- def test_binary(filename)
260
- output = `env LD_BIND_NOW=1 DYLD_BIND_AT_LAUNCH=1 #{Shellwords.escape(filename)} -v 2>&1`
261
- return $? && $?.exitstatus == 0 && output =~ /nginx version:/
262
- end
280
+ def test_binary(filename)
281
+ output = `env LD_BIND_NOW=1 DYLD_BIND_AT_LAUNCH=1 #{Shellwords.escape(filename)} -v 2>&1`
282
+ return $? && $?.exitstatus == 0 && output =~ /nginx version:/
283
+ end
263
284
 
264
- def compile_tip_message
265
- return "" if !@options[:compilation_tip]
266
- if PhusionPassenger.build_system_dir
267
- result = " Please compile the Nginx engine from source instead, by running:\n\n"
268
- result << " passenger-config compile-nginx-engine"
269
- else
270
- result = " Furthermore, this #{PROGRAM_NAME} installation does not "
271
- result << "come with any source code, so the Nginx engine cannot "
272
- result << "be compiled either. Please contact the person or "
273
- result << "organization who packaged #{PROGRAM_NAME} for help on this "
274
- result << "problem."
275
- end
276
- return result
277
- end
278
- end
285
+ def compile_tip_message
286
+ return "" if !@options[:compilation_tip]
287
+ if PhusionPassenger.build_system_dir
288
+ result = " Please compile the Nginx engine from source instead, by running:\n\n"
289
+ result << " passenger-config compile-nginx-engine"
290
+ else
291
+ result = " Furthermore, this #{PROGRAM_NAME} installation does not "
292
+ result << "come with any source code, so the Nginx engine cannot "
293
+ result << "be compiled either. Please contact the person or "
294
+ result << "organization who packaged #{PROGRAM_NAME} for help on this "
295
+ result << "problem."
296
+ end
297
+ return result
298
+ end
299
+ end
279
300
 
280
- end # module Config
301
+ end # module Config
281
302
  end # module PhusionPassenger