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
  #
@@ -30,145 +30,157 @@ PhusionPassenger.require_passenger_lib 'config/compile_agent_command'
30
30
  PhusionPassenger.require_passenger_lib 'utils/ansi_colors'
31
31
 
32
32
  module PhusionPassenger
33
- module Config
33
+ module Config
34
34
 
35
- class InstallAgentCommand < Command
36
- def run
37
- @options = {
38
- :log_level => Logger::INFO,
39
- :colorize => :auto,
40
- :force => false,
41
- :force_tip => true,
42
- :compile => true,
43
- :download_args => [
44
- "--no-error-colors",
45
- "--no-compilation-tip"
46
- ],
47
- :compile_args => []
48
- }
49
- parse_options
50
- initialize_objects
51
- sanity_check
52
- if !download
53
- compile
54
- end
55
- end
35
+ class InstallAgentCommand < Command
36
+ def run
37
+ @options = {
38
+ :log_level => Logger::INFO,
39
+ :colorize => :auto,
40
+ :force => false,
41
+ :force_tip => true,
42
+ :compile => true,
43
+ :download_args => [
44
+ "--no-error-colors",
45
+ "--no-compilation-tip"
46
+ ],
47
+ :compile_args => []
48
+ }
49
+ parse_options
50
+ initialize_objects
51
+ sanity_check
52
+ if !download
53
+ compile
54
+ end
55
+ end
56
56
 
57
- private
58
- def self.create_option_parser(options)
59
- OptionParser.new do |opts|
60
- nl = "\n" + ' ' * 37
61
- opts.banner = "Usage: passenger-config install-agent [OPTIONS]\n"
62
- opts.separator ""
63
- opts.separator " Install the #{PROGRAM_NAME} agent binary. The agent binary is required for"
64
- opts.separator " #{PROGRAM_NAME} to function properly. Installation is done either by"
65
- opts.separator " downloading it from the #{PROGRAM_NAME} website, or by compiling it from"
66
- opts.separator " source."
67
- opts.separator ""
57
+ private
58
+ def self.create_option_parser(options)
59
+ OptionParser.new do |opts|
60
+ nl = "\n" + ' ' * 37
61
+ opts.banner = "Usage: passenger-config install-agent [OPTIONS]\n"
62
+ opts.separator ""
63
+ opts.separator " Install the #{PROGRAM_NAME} agent binary. The agent binary is required for"
64
+ opts.separator " #{PROGRAM_NAME} to function properly. Installation is done either by"
65
+ opts.separator " downloading it from the #{PROGRAM_NAME} website, or by compiling it from"
66
+ opts.separator " source."
67
+ opts.separator ""
68
68
 
69
- opts.separator "Options:"
70
- opts.on("--working-dir PATH", String, "Store temporary files in the given#{nl}" +
71
- "directory, instead of creating one") do |val|
72
- options[:compile_args] << "--working-dir"
73
- options[:compile_args] << val
74
- end
75
- opts.on("--url-root URL", String, "Download the binary from a custom URL") do |value|
76
- options[:download_args] << "--url-root"
77
- options[:download_args] << value
78
- end
79
- opts.on("--brief", "Report progress in a brief style") do
80
- options[:brief] = true
81
- options[:download_args] << "--log-level"
82
- options[:download_args] << "warn"
83
- options[:download_args] << "--log-prefix"
84
- options[:download_args] << " "
85
- options[:download_args] << "--no-download-progress"
86
- end
87
- opts.on("-f", "--force", "Skip sanity checks") do
88
- options[:force] = true
89
- options[:download_args] << "--force"
90
- options[:compile_args] << "--force"
91
- end
92
- opts.on("--no-force-tip", "Do not print any tips regarding the --force parameter") do
93
- options[:force_tip] = false
94
- options[:download_args] << "--no-force-tip"
95
- options[:compile_args] << "--no-force-tip"
96
- end
97
- opts.on("--no-compile", "Download, but do not compile") do
98
- options[:compile] = false
99
- end
100
- opts.on("--skip-cache", "Do not copy the agent binary from cache") do
101
- options[:download_args] << "--skip-cache"
102
- end
103
- opts.on("-h", "--help", "Show this help") do
104
- options[:help] = true
105
- end
106
- end
107
- end
69
+ opts.separator "Options:"
70
+ opts.on("--working-dir PATH", String, "Store temporary files in the given#{nl}" +
71
+ "directory, instead of creating one") do |val|
72
+ options[:compile_args] << "--working-dir"
73
+ options[:compile_args] << val
74
+ end
75
+ opts.on("--url-root URL", String, "Download the binary from a custom URL") do |value|
76
+ options[:download_args] << "--url-root"
77
+ options[:download_args] << value
78
+ end
79
+ opts.on("--brief", "Report progress in a brief style") do
80
+ options[:brief] = true
81
+ options[:download_args] << "--log-level"
82
+ options[:download_args] << "warn"
83
+ options[:download_args] << "--log-prefix"
84
+ options[:download_args] << " "
85
+ options[:download_args] << "--no-download-progress"
86
+ end
87
+ opts.on("-f", "--force", "Skip sanity checks") do
88
+ options[:force] = true
89
+ options[:download_args] << "--force"
90
+ options[:compile_args] << "--force"
91
+ end
92
+ opts.on("--no-force-tip", "Do not print any tips regarding the#{nl}" +
93
+ "--force parameter") do
94
+ options[:force_tip] = false
95
+ options[:download_args] << "--no-force-tip"
96
+ options[:compile_args] << "--no-force-tip"
97
+ end
98
+ opts.on("--no-compile", "Download, but do not compile") do
99
+ options[:compile] = false
100
+ end
101
+ opts.on("--skip-cache", "Do not copy the agent binary from cache") do
102
+ options[:download_args] << "--skip-cache"
103
+ end
104
+ opts.on("--connect-timeout SECONDS", Integer,
105
+ "The maximum amount of time to spend on DNS#{nl}" +
106
+ "lookup and establishing the TCP connection.#{nl}" +
107
+ "Default: 30") do |val|
108
+ options[:download_args] << "--connect-timeout"
109
+ options[:download_args] << val.to_s
110
+ end
111
+ opts.on("--idle-timeout SECONDS", Integer, "The maximum idle read time. Default: 30") do |val|
112
+ options[:download_args] << "--idle-timeout"
113
+ options[:download_args] << val.to_s
114
+ end
115
+ opts.on("-h", "--help", "Show this help") do
116
+ options[:help] = true
117
+ end
118
+ end
119
+ end
108
120
 
109
- def help
110
- puts @parser
111
- end
121
+ def help
122
+ puts @parser
123
+ end
112
124
 
113
- def initialize_objects
114
- @colors = Utils::AnsiColors.new(@options[:colorize])
115
- @logger = Logger.new(STDOUT)
116
- @logger.level = @options[:log_level]
117
- @logger.formatter = proc do |severity, datetime, progname, msg|
118
- if severity == "FATAL" || severity == "ERROR"
119
- color = @colors.red
120
- else
121
- color = nil
122
- end
123
- result = ""
124
- msg.split("\n", -1).map do |line|
125
- result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
126
- end
127
- result
128
- end
129
- end
125
+ def initialize_objects
126
+ @colors = Utils::AnsiColors.new(@options[:colorize])
127
+ @logger = Logger.new(STDOUT)
128
+ @logger.level = @options[:log_level]
129
+ @logger.formatter = proc do |severity, datetime, progname, msg|
130
+ if severity == "FATAL" || severity == "ERROR"
131
+ color = @colors.red
132
+ else
133
+ color = nil
134
+ end
135
+ result = ""
136
+ msg.split("\n", -1).map do |line|
137
+ result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
138
+ end
139
+ result
140
+ end
141
+ end
130
142
 
131
- def sanity_check
132
- return if @options[:force]
143
+ def sanity_check
144
+ return if @options[:force]
133
145
 
134
- if PhusionPassenger.find_support_binary(AGENT_EXE)
135
- @logger.warn "#{@colors.green}The #{PROGRAM_NAME} agent is already installed."
136
- if @options[:force_tip]
137
- @logger.warn "If you want to redownload it, re-run this program with the --force parameter."
138
- end
139
- exit
140
- end
141
- end
146
+ if PhusionPassenger.find_support_binary(AGENT_EXE)
147
+ @logger.warn "#{@colors.green}The #{PROGRAM_NAME} agent is already installed."
148
+ if @options[:force_tip]
149
+ @logger.warn "If you want to redownload it, re-run this program with the --force parameter."
150
+ end
151
+ exit
152
+ end
153
+ end
142
154
 
143
- def download
144
- if @options[:brief]
145
- puts " --> Downloading a #{PROGRAM_NAME} agent binary for your platform"
146
- else
147
- puts "#{@colors.blue_bg}#{@colors.yellow}#{@colors.bold}Downloading a #{PROGRAM_NAME} agent " +
148
- "binary for your platform#{@colors.reset}"
149
- puts
150
- end
151
- begin
152
- DownloadAgentCommand.new(@options[:download_args]).run
153
- return true
154
- rescue SystemExit => e
155
- return e.success?
156
- end
157
- end
155
+ def download
156
+ if @options[:brief]
157
+ puts " --> Downloading a #{PROGRAM_NAME} agent binary for your platform"
158
+ else
159
+ puts "#{@colors.blue_bg}#{@colors.yellow}#{@colors.bold}Downloading a #{PROGRAM_NAME} agent " +
160
+ "binary for your platform#{@colors.reset}"
161
+ puts
162
+ end
163
+ begin
164
+ DownloadAgentCommand.new(@options[:download_args]).run
165
+ return true
166
+ rescue SystemExit => e
167
+ return e.success?
168
+ end
169
+ end
158
170
 
159
- def compile
160
- puts
161
- puts "---------------------------------------"
162
- puts
163
- if @options[:compile]
164
- puts "The #{PROGRAM_NAME} agent binary could not be downloaded. Compiling it from source instead."
165
- puts
166
- CompileAgentCommand.new(@options[:compile_args]).run
167
- else
168
- abort "No precompiled agent binary could be downloaded. Refusing to compile because --no-compile is given."
169
- end
170
- end
171
- end
171
+ def compile
172
+ puts
173
+ puts "---------------------------------------"
174
+ puts
175
+ if @options[:compile]
176
+ puts "The #{PROGRAM_NAME} agent binary could not be downloaded. Compiling it from source instead."
177
+ puts
178
+ CompileAgentCommand.new(@options[:compile_args]).run
179
+ else
180
+ abort "No precompiled agent binary could be downloaded. Refusing to compile because --no-compile is given."
181
+ end
182
+ end
183
+ end
172
184
 
173
- end # module Config
185
+ end # module Config
174
186
  end # module PhusionPassenger
@@ -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
  #
@@ -33,199 +33,219 @@ PhusionPassenger.require_passenger_lib 'utils/ansi_colors'
33
33
  PhusionPassenger.require_passenger_lib 'utils/tmpio'
34
34
 
35
35
  module PhusionPassenger
36
- module Config
36
+ module Config
37
37
 
38
- class InstallStandaloneRuntimeCommand < Command
39
- def run
40
- @options = {
41
- :log_level => Logger::INFO,
42
- :colorize => :auto,
43
- :force => false,
44
- :force_tip => true,
45
- :compile => true,
46
- :install_agent => true,
47
- :install_agent_args => [],
48
- :download_args => [
49
- "--no-error-colors",
50
- "--no-compilation-tip"
51
- ],
52
- :compile_args => []
53
- }
54
- parse_options
55
- initialize_objects
56
- sanity_check
57
- PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir) do |tmpdir|
58
- install_agent(tmpdir)
59
- if !download_nginx_engine
60
- compile_nginx_engine(tmpdir)
61
- end
62
- end
63
- end
38
+ class InstallStandaloneRuntimeCommand < Command
39
+ def run
40
+ @options = {
41
+ :log_level => Logger::INFO,
42
+ :colorize => :auto,
43
+ :force => false,
44
+ :force_tip => true,
45
+ :compile => true,
46
+ :install_agent => true,
47
+ :install_agent_args => [],
48
+ :download_args => [
49
+ "--no-error-colors",
50
+ "--no-compilation-tip"
51
+ ],
52
+ :compile_args => []
53
+ }
54
+ parse_options
55
+ initialize_objects
56
+ sanity_check
57
+ PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir) do |tmpdir|
58
+ install_agent(tmpdir)
59
+ if !download_nginx_engine
60
+ compile_nginx_engine(tmpdir)
61
+ end
62
+ end
63
+ end
64
64
 
65
- private
66
- def self.create_option_parser(options)
67
- OptionParser.new do |opts|
68
- nl = "\n" + ' ' * 37
69
- opts.banner = "Usage: passenger-config install-standalone-runtime [OPTIONS]\n"
70
- opts.separator ""
71
- opts.separator " Install the #{PROGRAM_NAME} Standalone runtime. This runtime consists of"
72
- opts.separator " the #{PROGRAM_NAME} agent, and an Nginx engine. Installation is done either"
73
- opts.separator " by downloading the necessary files from the #{PROGRAM_NAME} website, or"
74
- opts.separator " by compiling them from source."
75
- opts.separator ""
65
+ private
66
+ def self.create_option_parser(options)
67
+ OptionParser.new do |opts|
68
+ nl = "\n" + ' ' * 37
69
+ opts.banner = "Usage: passenger-config install-standalone-runtime [OPTIONS]\n"
70
+ opts.separator ""
71
+ opts.separator " Install the #{PROGRAM_NAME} Standalone runtime. This runtime consists of"
72
+ opts.separator " the #{PROGRAM_NAME} agent, and an Nginx engine. Installation is done either"
73
+ opts.separator " by downloading the necessary files from the #{PROGRAM_NAME} website, or"
74
+ opts.separator " by compiling them from source."
75
+ opts.separator ""
76
76
 
77
- opts.separator "Options:"
78
- opts.on("--working-dir PATH", String, "Store temporary files in the given#{nl}" +
79
- "directory, instead of creating one") do |val|
80
- options[:install_agent_args] << "--working-dir"
81
- options[:install_agent_args] << val
82
- options[:compile_args] << "--working-dir"
83
- options[:compile_args] << val
84
- end
85
- opts.on("--url-root URL", String, "Download binaries from a custom URL") do |value|
86
- options[:install_agent_args] << "--url-root"
87
- options[:install_agent_args] << value
88
- options[:download_args] << "--url-root"
89
- options[:download_args] << value
90
- end
91
- opts.on("--nginx-version VERSION", String, "Nginx version to compile. " +
92
- "Default: #{PREFERRED_NGINX_VERSION}") do |val|
93
- options[:nginx_version] = val
94
- end
95
- opts.on("--nginx-tarball PATH", String, "Use the given Nginx tarball instead of#{nl}" +
96
- "downloading it. You MUST also specify the#{nl}" +
97
- "Nginx version with --nginx-version") do |val|
98
- options[:nginx_tarball] = val
99
- end
100
- opts.on("--brief", "Report progress in a brief style") do
101
- options[:brief] = true
102
- options[:install_agent_args] << "--brief"
103
- options[:download_args] << "--log-level"
104
- options[:download_args] << "warn"
105
- options[:download_args] << "--log-prefix"
106
- options[:download_args] << " "
107
- options[:download_args] << "--no-download-progress"
108
- end
109
- opts.on("-f", "--force", "Skip sanity checks") do
110
- options[:force] = true
111
- options[:install_agent_args] << "--force"
112
- options[:download_args] << "--force"
113
- options[:compile_args] << "--force"
114
- end
115
- opts.on("--no-force-tip", "Do not print any tips regarding the --force parameter") do
116
- options[:force_tip] = false
117
- options[:install_agent_args] << "--no-force-tip"
118
- options[:download_args] << "--no-force-tip"
119
- options[:compile_args] << "--no-force-tip"
120
- end
121
- opts.on("--no-compile", "Download, but do not compile") do
122
- options[:compile] = false
123
- options[:install_agent_args] << "--no-compile"
124
- end
125
- opts.on("--skip-agent", "Do not install the agent") do
126
- options[:install_agent] = false
127
- end
128
- opts.on("--skip-cache", "Do not copy the binaries from cache") do
129
- options[:install_agent_args] << "--skip-cache"
130
- options[:download_args] << "--skip-cache"
131
- end
132
- opts.on("-h", "--help", "Show this help") do
133
- options[:help] = true
134
- end
135
- end
136
- end
77
+ opts.separator "Options:"
78
+ opts.on("--working-dir PATH", String, "Store temporary files in the given#{nl}" +
79
+ "directory, instead of creating one") do |val|
80
+ options[:install_agent_args] << "--working-dir"
81
+ options[:install_agent_args] << val
82
+ options[:compile_args] << "--working-dir"
83
+ options[:compile_args] << val
84
+ end
85
+ opts.on("--url-root URL", String, "Download binaries from a custom URL") do |value|
86
+ options[:install_agent_args] << "--url-root"
87
+ options[:install_agent_args] << value
88
+ options[:download_args] << "--url-root"
89
+ options[:download_args] << value
90
+ end
91
+ opts.on("--nginx-version VERSION", String, "Nginx version to compile. " +
92
+ "Default: #{PREFERRED_NGINX_VERSION}") do |val|
93
+ options[:nginx_version] = val
94
+ end
95
+ opts.on("--nginx-tarball PATH", String, "Use the given Nginx tarball instead of#{nl}" +
96
+ "downloading it. You MUST also specify the#{nl}" +
97
+ "Nginx version with --nginx-version") do |val|
98
+ options[:nginx_tarball] = val
99
+ end
100
+ opts.on("--brief", "Report progress in a brief style") do
101
+ options[:brief] = true
102
+ options[:install_agent_args] << "--brief"
103
+ options[:download_args] << "--log-level"
104
+ options[:download_args] << "warn"
105
+ options[:download_args] << "--log-prefix"
106
+ options[:download_args] << " "
107
+ options[:download_args] << "--no-download-progress"
108
+ end
109
+ opts.on("-f", "--force", "Skip sanity checks") do
110
+ options[:force] = true
111
+ options[:install_agent_args] << "--force"
112
+ options[:download_args] << "--force"
113
+ options[:compile_args] << "--force"
114
+ end
115
+ opts.on("--no-force-tip", "Do not print any tips regarding the#{nl}" +
116
+ "--force parameter") do
117
+ options[:force_tip] = false
118
+ options[:install_agent_args] << "--no-force-tip"
119
+ options[:download_args] << "--no-force-tip"
120
+ options[:compile_args] << "--no-force-tip"
121
+ end
122
+ opts.on("--no-compile", "Download, but do not compile") do
123
+ options[:compile] = false
124
+ options[:install_agent_args] << "--no-compile"
125
+ end
126
+ opts.on("--skip-agent", "Do not install the agent") do
127
+ options[:install_agent] = false
128
+ end
129
+ opts.on("--skip-cache", "Do not copy the binaries from cache") do
130
+ options[:install_agent_args] << "--skip-cache"
131
+ options[:download_args] << "--skip-cache"
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[:install_agent_args] << "--connect-timeout"
138
+ options[:install_agent_args] << val.to_s
139
+ options[:download_args] << "--connect-timeout"
140
+ options[:download_args] << val.to_s
141
+ options[:compile_args] << "--connect-timeout"
142
+ options[:compile_args] << val.to_s
143
+ end
144
+ opts.on("--idle-timeout SECONDS", Integer, "The maximum idle read time. Default: 30") do |val|
145
+ options[:install_agent_args] << "--idle-timeout"
146
+ options[:install_agent_args] << val.to_s
147
+ options[:download_args] << "--idle-timeout"
148
+ options[:download_args] << val.to_s
149
+ options[:compile_args] << "--idle-timeout"
150
+ options[:compile_args] << val.to_s
151
+ end
152
+ opts.on("-h", "--help", "Show this help") do
153
+ options[:help] = true
154
+ end
155
+ end
156
+ end
137
157
 
138
- def help
139
- puts @parser
140
- end
158
+ def help
159
+ puts @parser
160
+ end
141
161
 
142
- def initialize_objects
143
- @colors = Utils::AnsiColors.new(@options[:colorize])
144
- @logger = Logger.new(STDOUT)
145
- @logger.level = @options[:log_level]
146
- @logger.formatter = proc do |severity, datetime, progname, msg|
147
- if severity == "FATAL" || severity == "ERROR"
148
- color = @colors.red
149
- else
150
- color = nil
151
- end
152
- result = ""
153
- msg.split("\n", -1).map do |line|
154
- result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
155
- end
156
- result
157
- end
158
- if !@options[:nginx_version]
159
- if @options[:nginx_tarball]
160
- abort "#{@colors.red}Error: if you specify --nginx-tarball, " +
161
- "you must also specify --nginx-version.#{@colors.reset}"
162
- else
163
- @options[:nginx_version] = PREFERRED_NGINX_VERSION
164
- end
165
- end
166
- end
162
+ def initialize_objects
163
+ @colors = Utils::AnsiColors.new(@options[:colorize])
164
+ @logger = Logger.new(STDOUT)
165
+ @logger.level = @options[:log_level]
166
+ @logger.formatter = proc do |severity, datetime, progname, msg|
167
+ if severity == "FATAL" || severity == "ERROR"
168
+ color = @colors.red
169
+ else
170
+ color = nil
171
+ end
172
+ result = ""
173
+ msg.split("\n", -1).map do |line|
174
+ result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
175
+ end
176
+ result
177
+ end
178
+ if !@options[:nginx_version]
179
+ if @options[:nginx_tarball]
180
+ abort "#{@colors.red}Error: if you specify --nginx-tarball, " +
181
+ "you must also specify --nginx-version.#{@colors.reset}"
182
+ else
183
+ @options[:nginx_version] = PREFERRED_NGINX_VERSION
184
+ end
185
+ end
186
+ end
167
187
 
168
- def sanity_check
169
- return if @options[:force]
188
+ def sanity_check
189
+ return if @options[:force]
170
190
 
171
- all_installed = PhusionPassenger.find_support_binary(AGENT_EXE) &&
172
- PhusionPassenger.find_support_binary("nginx-#{@options[:nginx_version]}")
173
- if all_installed
174
- @logger.warn "#{@colors.green}The #{PROGRAM_NAME} Standalone runtime is already installed."
175
- if @options[:force_tip]
176
- @logger.warn "If you want to redownload it, re-run this program with the --force parameter."
177
- end
178
- exit
179
- end
180
- end
191
+ all_installed = PhusionPassenger.find_support_binary(AGENT_EXE) &&
192
+ PhusionPassenger.find_support_binary("nginx-#{@options[:nginx_version]}")
193
+ if all_installed
194
+ @logger.warn "#{@colors.green}The #{PROGRAM_NAME} Standalone runtime is already installed."
195
+ if @options[:force_tip]
196
+ @logger.warn "If you want to redownload it, re-run this program with the --force parameter."
197
+ end
198
+ exit
199
+ end
200
+ end
181
201
 
182
- def install_agent(tmpdir)
183
- if @options[:install_agent]
184
- args = @options[:install_agent_args].dup
185
- args << "--working-dir"
186
- args << tmpdir
187
- begin
188
- InstallAgentCommand.new(args).run
189
- rescue SystemExit => e
190
- raise e if !e.success?
191
- end
192
- puts
193
- end
194
- end
202
+ def install_agent(tmpdir)
203
+ if @options[:install_agent]
204
+ args = @options[:install_agent_args].dup
205
+ args << "--working-dir"
206
+ args << tmpdir
207
+ begin
208
+ InstallAgentCommand.new(args).run
209
+ rescue SystemExit => e
210
+ raise e if !e.success?
211
+ end
212
+ puts
213
+ end
214
+ end
195
215
 
196
- def download_nginx_engine
197
- if @options[:brief]
198
- puts " --> Installing Nginx #{@options[:nginx_version]} engine"
199
- else
200
- puts "#{@colors.blue_bg}#{@colors.yellow}#{@colors.bold}" +
201
- "Downloading an Nginx #{@options[:nginx_version]} engine " +
202
- "for your platform#{@colors.reset}"
203
- puts
204
- end
205
- begin
206
- DownloadNginxEngineCommand.new(@options[:download_args]).run
207
- return true
208
- rescue SystemExit => e
209
- return e.success?
210
- end
211
- end
216
+ def download_nginx_engine
217
+ if @options[:brief]
218
+ puts " --> Installing Nginx #{@options[:nginx_version]} engine"
219
+ else
220
+ puts "#{@colors.blue_bg}#{@colors.yellow}#{@colors.bold}" +
221
+ "Downloading an Nginx #{@options[:nginx_version]} engine " +
222
+ "for your platform#{@colors.reset}"
223
+ puts
224
+ end
225
+ begin
226
+ DownloadNginxEngineCommand.new(@options[:download_args]).run
227
+ true
228
+ rescue SystemExit => e
229
+ e.success?
230
+ end
231
+ end
212
232
 
213
- def compile_nginx_engine(tmpdir)
214
- puts
215
- puts "---------------------------------------"
216
- puts
217
- if @options[:compile]
218
- puts "No precompiled Nginx engine could be downloaded. Compiling it from source instead."
219
- puts
220
- args = @options[:compile_args].dup
221
- args << "--working-dir"
222
- args << tmpdir
223
- CompileNginxEngineCommand.new(args).run
224
- else
225
- abort "No precompiled Nginx engine could be downloaded. Refusing to compile because --no-compile is given."
226
- end
227
- end
228
- end
233
+ def compile_nginx_engine(tmpdir)
234
+ puts
235
+ puts "---------------------------------------"
236
+ puts
237
+ if @options[:compile]
238
+ puts "No precompiled Nginx engine could be downloaded. Compiling it from source instead."
239
+ puts
240
+ args = @options[:compile_args].dup
241
+ args << "--working-dir"
242
+ args << tmpdir
243
+ CompileNginxEngineCommand.new(args).run
244
+ else
245
+ abort "No precompiled Nginx engine could be downloaded. Refusing to compile because --no-compile is given."
246
+ end
247
+ end
248
+ end
229
249
 
230
- end # module Config
250
+ end # module Config
231
251
  end # module PhusionPassenger