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
@@ -25,173 +25,173 @@ PhusionPassenger.require_passenger_lib 'constants'
25
25
  PhusionPassenger.require_passenger_lib 'config/command'
26
26
 
27
27
  module PhusionPassenger
28
- module Config
28
+ module Config
29
29
 
30
- class AboutCommand < Command
31
- def self.help
32
- puts "Usage: passenger-config about <SUBCOMMAND>"
33
- puts
34
- puts " Show information about #{PROGRAM_NAME}."
35
- puts
36
- puts "Available subcommands:"
37
- puts " root Show #{PROGRAM_NAME}'s root."
38
- puts " ruby-libdir Show #{PROGRAM_NAME}'s Ruby library directory."
39
- puts " includedir Show the Nginx runtime library headers directory."
40
- puts " nginx-addon-dir Show #{PROGRAM_NAME}'s Nginx addon directory."
41
- puts " nginx-libs Show Nginx runtime library flags."
42
- puts " resourcesdir Show #{PROGRAM_NAME}'s resources directory."
43
- puts " compiled Check whether runtime libraries are compiled."
44
- puts " custom-packaged Check whether Phusion Passenger is custom"
45
- puts " packaged."
46
- puts " installed-from-release-package Check whether this installation came from"
47
- puts " an official release package."
48
- puts " make-locations-ini Generate a locations.ini based on the current"
49
- puts " install paths."
50
- puts " detect-apache2 Autodetect Apache installations."
51
- puts " ruby-command Show the correct command for invoking the Ruby"
52
- puts " interpreter."
53
- puts " rubyext-compat-id Show the Ruby extension binary compatibility ID."
54
- puts " cxx-compat-id Show the C++ binary compatibility ID."
55
- puts " version Show the version number."
56
- end
30
+ class AboutCommand < Command
31
+ def self.help
32
+ puts "Usage: passenger-config about <SUBCOMMAND>"
33
+ puts
34
+ puts " Show information about #{PROGRAM_NAME}."
35
+ puts
36
+ puts "Available subcommands:"
37
+ puts " root Show #{PROGRAM_NAME}'s root."
38
+ puts " ruby-libdir Show #{PROGRAM_NAME}'s Ruby library directory."
39
+ puts " includedir Show the Nginx runtime library headers directory."
40
+ puts " nginx-addon-dir Show #{PROGRAM_NAME}'s Nginx addon directory."
41
+ puts " nginx-libs Show Nginx runtime library flags."
42
+ puts " resourcesdir Show #{PROGRAM_NAME}'s resources directory."
43
+ puts " compiled Check whether runtime libraries are compiled."
44
+ puts " custom-packaged Check whether Phusion Passenger is custom"
45
+ puts " packaged."
46
+ puts " installed-from-release-package Check whether this installation came from"
47
+ puts " an official release package."
48
+ puts " make-locations-ini Generate a locations.ini based on the current"
49
+ puts " install paths."
50
+ puts " detect-apache2 Autodetect Apache installations."
51
+ puts " ruby-command Show the correct command for invoking the Ruby"
52
+ puts " interpreter."
53
+ puts " rubyext-compat-id Show the Ruby extension binary compatibility ID."
54
+ puts " cxx-compat-id Show the C++ binary compatibility ID."
55
+ puts " version Show the version number."
56
+ end
57
57
 
58
- def run
59
- PhusionPassenger.require_passenger_lib 'platform_info'
60
- PhusionPassenger.require_passenger_lib 'platform_info/compiler'
58
+ def run
59
+ PhusionPassenger.require_passenger_lib 'platform_info'
60
+ PhusionPassenger.require_passenger_lib 'platform_info/compiler'
61
61
 
62
- subcommand = @argv[0].to_s.dup
63
- # Compatibility with version <= 4.0.29: accept both
64
- # 'subcommand' and '--subcommand'.
65
- subcommand = "--#{subcommand}" if subcommand !~ /^--/
62
+ subcommand = @argv[0].to_s.dup
63
+ # Compatibility with version <= 4.0.29: accept both
64
+ # 'subcommand' and '--subcommand'.
65
+ subcommand = "--#{subcommand}" if subcommand !~ /^--/
66
66
 
67
- case subcommand
68
- when "--root"
69
- puts PhusionPassenger.install_spec
70
- when "--ruby-libdir"
71
- puts PhusionPassenger.ruby_libdir
72
- when "--includedir"
73
- puts PhusionPassenger.include_dir
74
- when "--nginx-addon-dir"
75
- puts PhusionPassenger.nginx_module_source_dir
76
- when "--nginx-libs"
77
- puts "#{common_library.link_objects_as_string} #{PhusionPassenger.lib_dir}/common/libboost_oxt.a"
78
- when "--resourcesdir"
79
- puts PhusionPassenger.resources_dir
80
- when "--compiled"
81
- common_library.link_objects.each do |filename|
82
- if !File.exist?(filename)
83
- exit 1
84
- end
85
- end
86
- if File.exist?("#{PhusionPassenger.lib_dir}/common/libboost_oxt.a")
87
- exit 0
88
- else
89
- exit 1
90
- end
91
- when "--custom-packaged"
92
- if PhusionPassenger.custom_packaged?
93
- exit 0
94
- else
95
- exit 1
96
- end
97
- when "--installed-from-release-package"
98
- if PhusionPassenger.installed_from_release_package?
99
- exit 0
100
- else
101
- exit 1
102
- end
103
- when "--make-locations-ini"
104
- if @argv[1] =~ /^--for-(native-)?packaging-method=(.*)/
105
- packaging_method = $2
106
- else
107
- packaging_method = nil
108
- end
67
+ case subcommand
68
+ when "--root"
69
+ puts PhusionPassenger.install_spec
70
+ when "--ruby-libdir"
71
+ puts PhusionPassenger.ruby_libdir
72
+ when "--includedir"
73
+ puts PhusionPassenger.include_dir
74
+ when "--nginx-addon-dir"
75
+ puts PhusionPassenger.nginx_module_source_dir
76
+ when "--nginx-libs"
77
+ puts "#{common_library.link_objects_as_string} #{PhusionPassenger.lib_dir}/common/libboost_oxt.a"
78
+ when "--resourcesdir"
79
+ puts PhusionPassenger.resources_dir
80
+ when "--compiled"
81
+ common_library.link_objects.each do |filename|
82
+ if !File.exist?(filename)
83
+ exit 1
84
+ end
85
+ end
86
+ if File.exist?("#{PhusionPassenger.lib_dir}/common/libboost_oxt.a")
87
+ exit 0
88
+ else
89
+ exit 1
90
+ end
91
+ when "--custom-packaged"
92
+ if PhusionPassenger.custom_packaged?
93
+ exit 0
94
+ else
95
+ exit 1
96
+ end
97
+ when "--installed-from-release-package"
98
+ if PhusionPassenger.installed_from_release_package?
99
+ exit 0
100
+ else
101
+ exit 1
102
+ end
103
+ when "--make-locations-ini"
104
+ if @argv[1] =~ /^--for-(native-)?packaging-method=(.*)/
105
+ packaging_method = $2
106
+ else
107
+ packaging_method = nil
108
+ end
109
109
 
110
- puts "[locations]"
111
- if packaging_method
112
- puts "packaging_method=#{packaging_method}"
113
- else
114
- if PhusionPassenger.custom_packaged?
115
- puts "packaging_method=#{PhusionPassenger.packaging_method}"
116
- else
117
- puts "packaging_method=unknown"
118
- end
119
- end
120
- PhusionPassenger::REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
121
- puts "#{field}=#{PhusionPassenger.send(field)}"
122
- end
123
- PhusionPassenger::OPTIONAL_LOCATIONS_INI_FIELDS.each do |field|
124
- value = PhusionPassenger.send(field)
125
- puts "#{field}=#{value}" if value
126
- end
127
- when "--detect-apache2"
128
- PhusionPassenger.require_passenger_lib 'platform_info/apache_detector'
129
- detector = PhusionPassenger::PlatformInfo::ApacheDetector.new(STDOUT)
130
- STDOUT.write(Utils::AnsiColors::DEFAULT_TERMINAL_COLOR)
131
- STDOUT.flush
132
- begin
133
- detector.detect_all
134
- detector.report
135
- ensure
136
- detector.finish
137
- STDOUT.write(Utils::AnsiColors::RESET)
138
- STDOUT.flush
139
- end
140
- when "--ruby-command"
141
- PhusionPassenger.require_passenger_lib 'platform_info/ruby'
142
- ruby = PhusionPassenger::PlatformInfo.ruby_command
143
- puts "passenger-config was invoked through the following Ruby interpreter:"
144
- puts " Command: #{ruby}"
145
- STDOUT.write " Version: "
146
- STDOUT.flush
147
- system("/bin/sh -c '#{ruby} -v'")
148
- puts " To use in Apache: PassengerRuby #{ruby}"
149
- puts " To use in Nginx : passenger_ruby #{ruby}"
150
- puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
151
- puts
110
+ puts "[locations]"
111
+ if packaging_method
112
+ puts "packaging_method=#{packaging_method}"
113
+ else
114
+ if PhusionPassenger.custom_packaged?
115
+ puts "packaging_method=#{PhusionPassenger.packaging_method}"
116
+ else
117
+ puts "packaging_method=unknown"
118
+ end
119
+ end
120
+ PhusionPassenger::REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
121
+ puts "#{field}=#{PhusionPassenger.send(field)}"
122
+ end
123
+ PhusionPassenger::OPTIONAL_LOCATIONS_INI_FIELDS.each do |field|
124
+ value = PhusionPassenger.send(field)
125
+ puts "#{field}=#{value}" if value
126
+ end
127
+ when "--detect-apache2"
128
+ PhusionPassenger.require_passenger_lib 'platform_info/apache_detector'
129
+ detector = PhusionPassenger::PlatformInfo::ApacheDetector.new(STDOUT)
130
+ STDOUT.write(Utils::AnsiColors::DEFAULT_TERMINAL_COLOR)
131
+ STDOUT.flush
132
+ begin
133
+ detector.detect_all
134
+ detector.report
135
+ ensure
136
+ detector.finish
137
+ STDOUT.write(Utils::AnsiColors::RESET)
138
+ STDOUT.flush
139
+ end
140
+ when "--ruby-command"
141
+ PhusionPassenger.require_passenger_lib 'platform_info/ruby'
142
+ ruby = PhusionPassenger::PlatformInfo.ruby_command
143
+ puts "passenger-config was invoked through the following Ruby interpreter:"
144
+ puts " Command: #{ruby}"
145
+ STDOUT.write " Version: "
146
+ STDOUT.flush
147
+ system("/bin/sh -c '#{ruby} -v'")
148
+ puts " To use in Apache: PassengerRuby #{ruby}"
149
+ puts " To use in Nginx : passenger_ruby #{ruby}"
150
+ puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
151
+ puts
152
152
 
153
- ruby = PhusionPassenger::PlatformInfo.find_command('ruby')
154
- if ruby && !ruby.include?("rvm/rubies/")
155
- # If this is an RVM Ruby executable then we don't show it. We want people to
156
- # use the RVM wrapper scripts only.
157
- puts "The following Ruby interpreter was found first in $PATH:"
158
- puts " Command: #{ruby}"
159
- STDOUT.write " Version: "
160
- STDOUT.flush
161
- system("/bin/sh -c '#{ruby} -v'")
162
- puts " To use in Apache: PassengerRuby #{ruby}"
163
- puts " To use in Nginx : passenger_ruby #{ruby}"
164
- puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
165
- elsif !ruby.include?("rvm/rubies/")
166
- puts "No Ruby interpreter found in $PATH."
167
- end
168
- puts
169
- puts "## Notes for RVM users"
170
- puts "Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config --ruby-command'."
171
- when "--rubyext-compat-id"
172
- PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
173
- puts PhusionPassenger::PlatformInfo.ruby_extension_binary_compatibility_id
174
- when "--cxx-compat-id"
175
- PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
176
- puts PhusionPassenger::PlatformInfo.cxx_binary_compatibility_id
177
- when "--version"
178
- puts PhusionPassenger::VERSION_STRING
179
- when "--help"
180
- self.class.help
181
- else
182
- self.class.help
183
- exit 1
184
- end
185
- end
153
+ ruby = PhusionPassenger::PlatformInfo.find_command('ruby')
154
+ if ruby && !ruby.include?("rvm/rubies/")
155
+ # If this is an RVM Ruby executable then we don't show it. We want people to
156
+ # use the RVM wrapper scripts only.
157
+ puts "The following Ruby interpreter was found first in $PATH:"
158
+ puts " Command: #{ruby}"
159
+ STDOUT.write " Version: "
160
+ STDOUT.flush
161
+ system("/bin/sh -c '#{ruby} -v'")
162
+ puts " To use in Apache: PassengerRuby #{ruby}"
163
+ puts " To use in Nginx : passenger_ruby #{ruby}"
164
+ puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
165
+ elsif !ruby.include?("rvm/rubies/")
166
+ puts "No Ruby interpreter found in $PATH."
167
+ end
168
+ puts
169
+ puts "## Notes for RVM users"
170
+ puts "Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config --ruby-command'."
171
+ when "--rubyext-compat-id"
172
+ PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
173
+ puts PhusionPassenger::PlatformInfo.ruby_extension_binary_compatibility_id
174
+ when "--cxx-compat-id"
175
+ PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
176
+ puts PhusionPassenger::PlatformInfo.cxx_binary_compatibility_id
177
+ when "--version"
178
+ puts PhusionPassenger::VERSION_STRING
179
+ when "--help"
180
+ self.class.help
181
+ else
182
+ self.class.help
183
+ exit 1
184
+ end
185
+ end
186
186
 
187
- private
188
- def common_library
189
- PhusionPassenger.require_passenger_lib 'common_library'
190
- return COMMON_LIBRARY.
191
- only(*NGINX_LIBS_SELECTOR).
192
- set_output_dir("#{PhusionPassenger.lib_dir}/common/libpassenger_common")
193
- end
194
- end
187
+ private
188
+ def common_library
189
+ PhusionPassenger.require_passenger_lib 'common_library'
190
+ return COMMON_LIBRARY.
191
+ only(*NGINX_LIBS_SELECTOR).
192
+ set_output_dir("#{PhusionPassenger.lib_dir}/common/libpassenger_common")
193
+ end
194
+ end
195
195
 
196
- end # module Config
196
+ end # module Config
197
197
  end # module PhusionPassenger
@@ -31,145 +31,145 @@ PhusionPassenger.require_passenger_lib 'config/utils'
31
31
  PhusionPassenger.require_passenger_lib 'utils/json'
32
32
 
33
33
  module PhusionPassenger
34
- module Config
34
+ module Config
35
35
 
36
- class AdminCommandCommand < Command
37
- include PhusionPassenger::Config::Utils
36
+ class AdminCommandCommand < Command
37
+ include PhusionPassenger::Config::Utils
38
38
 
39
- def self.create_default_options
40
- return { :socket => "server_admin" }
41
- end
39
+ def self.create_default_options
40
+ return { :socket => "server_admin" }
41
+ end
42
42
 
43
- def run
44
- parse_options
45
- initialize_objects
46
- select_passenger_instance
47
- invoke
48
- end
43
+ def run
44
+ parse_options
45
+ initialize_objects
46
+ select_passenger_instance
47
+ invoke
48
+ end
49
49
 
50
- private
51
- def self.create_option_parser(options)
52
- OptionParser.new do |opts|
53
- nl = "\n" + ' ' * 37
54
- opts.banner = "Usage: passenger-config invoke-command <METHOD> <PATH> [OPTIONS]\n"
55
- opts.separator ""
56
- opts.separator " Invoke an internal #{PROGRAM_NAME} admin command. #{PROGRAM_NAME} listens"
57
- opts.separator " on a local HTTP server for admin commands. Other `passenger-config` commands"
58
- opts.separator " are just shortcuts for sending specific HTTP requests to the"
59
- opts.separator " #{PROGRAM_NAME} admin HTTP server. `passenger-config invoke-command` allows"
60
- opts.separator " you to send requests directly."
61
- opts.separator ""
62
- opts.separator " METHOD is an HTTP verb, like 'GET', 'POST', 'PUT' or 'DELETE'."
63
- opts.separator " PATH is the admin URI. You can pass POST data with '-d'."
64
- opts.separator ""
65
- opts.separator " Example: passenger-config admin-command GET /server.json"
66
- opts.separator " Sends the 'GET /server.json' command to the HTTP server agent."
67
- opts.separator ""
68
- opts.separator " Example: passenger-config admin-command PUT /config.json \\"
69
- opts.separator " -d '{\"log_level\", 7}'"
70
- opts.separator " Sends the 'PUT /config.json' command to the HTTP server agent, with the"
71
- opts.separator " given PUT data."
72
- opts.separator ""
73
- opts.separator " Example: passenger-config admin-command POST /shutdown.json -a watchdog"
74
- opts.separator " Sends the 'POST /shutdown.json' command to the watchdog, with no POST data."
75
- opts.separator ""
50
+ private
51
+ def self.create_option_parser(options)
52
+ OptionParser.new do |opts|
53
+ nl = "\n" + ' ' * 37
54
+ opts.banner = "Usage: passenger-config invoke-command <METHOD> <PATH> [OPTIONS]\n"
55
+ opts.separator ""
56
+ opts.separator " Invoke an internal #{PROGRAM_NAME} admin command. #{PROGRAM_NAME} listens"
57
+ opts.separator " on a local HTTP server for admin commands. Other `passenger-config` commands"
58
+ opts.separator " are just shortcuts for sending specific HTTP requests to the"
59
+ opts.separator " #{PROGRAM_NAME} admin HTTP server. `passenger-config invoke-command` allows"
60
+ opts.separator " you to send requests directly."
61
+ opts.separator ""
62
+ opts.separator " METHOD is an HTTP verb, like 'GET', 'POST', 'PUT' or 'DELETE'."
63
+ opts.separator " PATH is the admin URI. You can pass POST data with '-d'."
64
+ opts.separator ""
65
+ opts.separator " Example: passenger-config admin-command GET /server.json"
66
+ opts.separator " Sends the 'GET /server.json' command to the HTTP server agent."
67
+ opts.separator ""
68
+ opts.separator " Example: passenger-config admin-command PUT /config.json \\"
69
+ opts.separator " -d '{\"log_level\", 7}'"
70
+ opts.separator " Sends the 'PUT /config.json' command to the HTTP server agent, with the"
71
+ opts.separator " given PUT data."
72
+ opts.separator ""
73
+ opts.separator " Example: passenger-config admin-command POST /shutdown.json -a watchdog"
74
+ opts.separator " Sends the 'POST /shutdown.json' command to the watchdog, with no POST data."
75
+ opts.separator ""
76
76
 
77
- opts.separator "Options:"
78
- opts.on("-d", "--data DATA", String, "Specify HTTP request body data") do |value|
79
- options[:data] = value
80
- end
81
- opts.on("-i", "--stdin", "Read HTTP request body data from stdin") do
82
- options[:data_source] = :stdin
83
- end
84
- opts.on("-f", "--data-file PATH", String, "Read HTTP request body data from the given#{nl}" +
85
- "file") do |value|
86
- options[:data_source] = value
87
- end
88
- opts.on("-a", "--agent NAME", String, "The name of the socket to send the command#{nl}" +
89
- "to. This specifies which agent the request#{nl}" +
90
- "is sent to. Choices: watchdog,#{nl}" +
91
- "server_admin, logging_admin.#{nl}" +
92
- "Default: server_admin") do |val|
93
- options[:socket] = val
94
- end
95
- opts.on("--show-headers", "Show HTTP response headers") do
96
- options[:show_headers] = true
97
- end
98
- opts.on("--ignore-response-code", "Exit successfully even if a non-2xx response was returned") do
99
- options[:ignore_response_code] = true
100
- end
101
- opts.on("--instance NAME", String, "The #{PROGRAM_NAME} instance to select") do |value|
102
- options[:instance] = value
103
- end
104
- opts.on("-h", "--help", "Show this help") do
105
- options[:help] = true
106
- end
107
- end
108
- end
77
+ opts.separator "Options:"
78
+ opts.on("-d", "--data DATA", String, "Specify HTTP request body data") do |value|
79
+ options[:data] = value
80
+ end
81
+ opts.on("-i", "--stdin", "Read HTTP request body data from stdin") do
82
+ options[:data_source] = :stdin
83
+ end
84
+ opts.on("-f", "--data-file PATH", String, "Read HTTP request body data from the given#{nl}" +
85
+ "file") do |value|
86
+ options[:data_source] = value
87
+ end
88
+ opts.on("-a", "--agent NAME", String, "The name of the socket to send the command#{nl}" +
89
+ "to. This specifies which agent the request#{nl}" +
90
+ "is sent to. Choices: watchdog,#{nl}" +
91
+ "server_admin, logging_admin.#{nl}" +
92
+ "Default: server_admin") do |val|
93
+ options[:socket] = val
94
+ end
95
+ opts.on("--show-headers", "Show HTTP response headers") do
96
+ options[:show_headers] = true
97
+ end
98
+ opts.on("--ignore-response-code", "Exit successfully even if a non-2xx response was returned") do
99
+ options[:ignore_response_code] = true
100
+ end
101
+ opts.on("--instance NAME", String, "The #{PROGRAM_NAME} instance to select") do |value|
102
+ options[:instance] = value
103
+ end
104
+ opts.on("-h", "--help", "Show this help") do
105
+ options[:help] = true
106
+ end
107
+ end
108
+ end
109
109
 
110
- def initialize_objects
111
- if @argv.size != 2
112
- abort "You've passed to few arguments. See --help for more information."
113
- end
110
+ def initialize_objects
111
+ if @argv.size != 2
112
+ abort "You've passed to few arguments. See --help for more information."
113
+ end
114
114
 
115
- @method = @argv[0]
116
- @path = @argv[1]
115
+ @method = @argv[0]
116
+ @path = @argv[1]
117
117
 
118
- case @method.upcase
119
- when "GET"
120
- @request = Net::HTTP::Get.new(@path)
121
- when "POST"
122
- @request = Net::HTTP::Post.new(@path)
123
- when "PUT"
124
- @request = Net::HTTP::Put.new(@path)
125
- when "DELETE"
126
- @request = Net::HTTP::Delete.new(@path)
127
- else
128
- abort "Unknown method #{@method.inspect}. Please specify either GET, POST, PUT or DELETE."
129
- end
130
- if @path !~ /\A\//
131
- abort "The path must start with a slash (/). See --help for more information."
132
- end
118
+ case @method.upcase
119
+ when "GET"
120
+ @request = Net::HTTP::Get.new(@path)
121
+ when "POST"
122
+ @request = Net::HTTP::Post.new(@path)
123
+ when "PUT"
124
+ @request = Net::HTTP::Put.new(@path)
125
+ when "DELETE"
126
+ @request = Net::HTTP::Delete.new(@path)
127
+ else
128
+ abort "Unknown method #{@method.inspect}. Please specify either GET, POST, PUT or DELETE."
129
+ end
130
+ if @path !~ /\A\//
131
+ abort "The path must start with a slash (/). See --help for more information."
132
+ end
133
133
 
134
- if @options[:data] && @options[:data_source]
135
- abort "You cannot specify both --data and --stdin/--data-file. Please choose either one."
136
- end
137
- if @options[:data_source] == :stdin
138
- STDIN.binmode
139
- @options[:data] = STDIN.read
140
- elsif @options[:data_source]
141
- File.open(@options[:data_source], "rb") do |f|
142
- @options[:data] = f.read
143
- end
144
- end
145
- end
134
+ if @options[:data] && @options[:data_source]
135
+ abort "You cannot specify both --data and --stdin/--data-file. Please choose either one."
136
+ end
137
+ if @options[:data_source] == :stdin
138
+ STDIN.binmode
139
+ @options[:data] = STDIN.read
140
+ elsif @options[:data_source]
141
+ File.open(@options[:data_source], "rb") do |f|
142
+ @options[:data] = f.read
143
+ end
144
+ end
145
+ end
146
146
 
147
- def invoke
148
- password = obtain_full_admin_password(@instance)
149
- @request.basic_auth("admin", password)
150
- @request["connection"] = "close"
151
- if @options[:data]
152
- @request.content_type = "application/json"
153
- @request.body = @options[:data]
154
- end
155
- response = @instance.http_request("agents.s/#{@options[:socket]}", @request)
156
- if @options[:show_headers]
157
- print_headers(response)
158
- end
159
- puts response.body
160
- if !@options[:ignore_response_code] && response.code.to_i / 100 != 2
161
- abort
162
- end
163
- end
147
+ def invoke
148
+ password = obtain_full_admin_password(@instance)
149
+ @request.basic_auth("admin", password)
150
+ @request["connection"] = "close"
151
+ if @options[:data]
152
+ @request.content_type = "application/json"
153
+ @request.body = @options[:data]
154
+ end
155
+ response = @instance.http_request("agents.s/#{@options[:socket]}", @request)
156
+ if @options[:show_headers]
157
+ print_headers(response)
158
+ end
159
+ puts response.body
160
+ if !@options[:ignore_response_code] && response.code.to_i / 100 != 2
161
+ abort
162
+ end
163
+ end
164
164
 
165
- def print_headers(response)
166
- puts "HTTP/1.1 #{response.message} #{response.code}"
167
- response.each_header do |name, val|
168
- puts "#{name}: #{val}"
169
- end
170
- puts
171
- end
172
- end
165
+ def print_headers(response)
166
+ puts "HTTP/1.1 #{response.message} #{response.code}"
167
+ response.each_header do |name, val|
168
+ puts "#{name}: #{val}"
169
+ end
170
+ puts
171
+ end
172
+ end
173
173
 
174
- end # module Config
174
+ end # module Config
175
175
  end # module PhusionPassenger