passenger 4.0.14 → 4.0.16

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 (121) hide show
  1. data.tar.gz.asc +7 -7
  2. data/NEWS +69 -0
  3. data/bin/passenger-install-apache2-module +7 -1
  4. data/bin/passenger-install-nginx-module +18 -1
  5. data/build/apache2.rb +25 -1
  6. data/build/basics.rb +7 -4
  7. data/build/debian.rb +72 -25
  8. data/build/nginx.rb +24 -0
  9. data/build/packaging.rb +45 -3
  10. data/debian.template/{control → control.template} +17 -8
  11. data/debian.template/ruby-passenger.install.template +1 -0
  12. data/debian.template/rules.template +9 -3
  13. data/dev/run_travis.sh +14 -0
  14. data/doc/Users guide Apache.idmap.txt +64 -48
  15. data/doc/Users guide Apache.txt +127 -93
  16. data/doc/Users guide Nginx.idmap.txt +46 -28
  17. data/doc/Users guide Nginx.txt +100 -12
  18. data/doc/images/{conservative_spawning.png → direct_spawning.png} +0 -0
  19. data/doc/images/{conservative_spawning.svg → direct_spawning.svg} +0 -0
  20. data/doc/users_guide_snippets/installation.txt +107 -66
  21. data/doc/users_guide_snippets/passenger_spawn_method.txt +1 -1
  22. data/doc/users_guide_snippets/rvm_helper_tool.txt +0 -12
  23. data/doc/users_guide_snippets/tips.txt +70 -3
  24. data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +2 -0
  25. data/doc/users_guide_snippets/under_the_hood/relationship_with_ruby.txt +114 -0
  26. data/ext/apache2/Configuration.cpp +53 -101
  27. data/ext/apache2/Configuration.hpp +19 -41
  28. data/ext/apache2/ConfigurationCommands.cpp +95 -0
  29. data/ext/apache2/ConfigurationCommands.cpp.erb +91 -0
  30. data/ext/apache2/ConfigurationFields.hpp +59 -0
  31. data/ext/apache2/ConfigurationFields.hpp.erb +89 -0
  32. data/ext/apache2/ConfigurationSetters.cpp +223 -0
  33. data/ext/apache2/ConfigurationSetters.cpp.erb +126 -0
  34. data/ext/apache2/CreateDirConfig.cpp +50 -0
  35. data/ext/apache2/CreateDirConfig.cpp.erb +71 -0
  36. data/ext/apache2/Hooks.cpp +6 -0
  37. data/ext/apache2/MergeDirConfig.cpp +103 -0
  38. data/ext/apache2/MergeDirConfig.cpp.erb +81 -0
  39. data/ext/common/ApplicationPool2/AppTypes.cpp +2 -0
  40. data/ext/common/ApplicationPool2/AppTypes.h +2 -0
  41. data/ext/common/ApplicationPool2/Common.h +1 -1
  42. data/ext/common/ApplicationPool2/Group.h +56 -7
  43. data/ext/common/ApplicationPool2/Implementation.cpp +133 -31
  44. data/ext/common/ApplicationPool2/Options.h +23 -2
  45. data/ext/common/ApplicationPool2/Pool.h +8 -1
  46. data/ext/common/ApplicationPool2/Process.h +9 -0
  47. data/ext/common/ApplicationPool2/Session.h +1 -0
  48. data/ext/common/ApplicationPool2/Spawner.h +21 -19
  49. data/ext/common/ApplicationPool2/SuperGroup.h +1 -1
  50. data/ext/common/Constants.h +21 -17
  51. data/ext/common/Constants.h.erb +1 -1
  52. data/ext/common/Exceptions.h +19 -0
  53. data/ext/common/ServerInstanceDir.h +8 -4
  54. data/ext/common/Utils.cpp +33 -1
  55. data/ext/common/Utils.h +14 -0
  56. data/ext/common/Utils/StrIntUtils.cpp +16 -0
  57. data/ext/common/Utils/StrIntUtils.h +5 -0
  58. data/ext/common/agents/HelperAgent/Main.cpp +5 -5
  59. data/ext/common/agents/HelperAgent/RequestHandler.h +94 -45
  60. data/ext/common/agents/LoggingAgent/Main.cpp +10 -26
  61. data/ext/common/agents/Watchdog/Main.cpp +4 -15
  62. data/ext/nginx/CacheLocationConfig.c +501 -0
  63. data/ext/nginx/CacheLocationConfig.c.erb +140 -0
  64. data/ext/nginx/Configuration.c +29 -453
  65. data/ext/nginx/Configuration.h +3 -21
  66. data/ext/nginx/ConfigurationCommands.c +501 -0
  67. data/ext/nginx/ConfigurationCommands.c.erb +136 -0
  68. data/ext/nginx/ConfigurationFields.h +89 -0
  69. data/ext/nginx/ConfigurationFields.h.erb +85 -0
  70. data/ext/nginx/ContentHandler.c +3 -166
  71. data/ext/nginx/CreateLocationConfig.c +146 -0
  72. data/ext/nginx/CreateLocationConfig.c.erb +70 -0
  73. data/ext/nginx/MergeLocationConfig.c +166 -0
  74. data/ext/nginx/MergeLocationConfig.c.erb +72 -0
  75. data/ext/nginx/config +4 -0
  76. data/ext/oxt/detail/tracable_exception_disabled.hpp +21 -1
  77. data/ext/oxt/detail/tracable_exception_enabled.hpp +4 -1
  78. data/ext/oxt/implementation.cpp +7 -1
  79. data/ext/oxt/macros.hpp +9 -7
  80. data/helper-scripts/backtrace-sanitizer.rb +23 -0
  81. data/helper-scripts/classic-rails-loader.rb +23 -0
  82. data/helper-scripts/classic-rails-preloader.rb +23 -0
  83. data/helper-scripts/download_binaries/extconf.rb +10 -5
  84. data/helper-scripts/meteor-loader.rb +127 -0
  85. data/helper-scripts/node-loader.js +1 -1
  86. data/helper-scripts/rack-preloader.rb +23 -0
  87. data/helper-scripts/system-memory-stats.py +22 -0
  88. data/helper-scripts/touch-dir.sh +48 -0
  89. data/lib/phusion_passenger.rb +1 -1
  90. data/lib/phusion_passenger/apache2/config_options.rb +104 -0
  91. data/lib/phusion_passenger/constants.rb +8 -0
  92. data/lib/phusion_passenger/native_support.rb +9 -1
  93. data/lib/phusion_passenger/nginx/config_options.rb +328 -0
  94. data/lib/phusion_passenger/packaging.rb +2 -2
  95. data/lib/phusion_passenger/platform_info/apache.rb +8 -0
  96. data/lib/phusion_passenger/platform_info/compiler.rb +2 -2
  97. data/lib/phusion_passenger/rails3_extensions/init.rb +19 -4
  98. data/lib/phusion_passenger/ruby_core_enhancements.rb +4 -1
  99. data/lib/phusion_passenger/standalone/app_finder.rb +3 -2
  100. data/lib/phusion_passenger/standalone/command.rb +1 -0
  101. data/lib/phusion_passenger/standalone/runtime_installer.rb +1 -6
  102. data/lib/phusion_passenger/standalone/runtime_locator.rb +9 -2
  103. data/lib/phusion_passenger/standalone/start_command.rb +45 -9
  104. data/lib/phusion_passenger/utils.rb +4 -1
  105. data/resources/templates/{nginx → installer_common}/run_installer_as_root.txt.erb +3 -1
  106. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +6 -0
  107. data/resources/templates/standalone/config.erb +8 -8
  108. data/test/cxx/ApplicationPool2/PoolTest.cpp +120 -3
  109. data/test/cxx/RequestHandlerTest.cpp +66 -3
  110. data/test/integration_tests/native_packaging_spec.rb +41 -0
  111. data/test/integration_tests/nginx_tests.rb +1 -0
  112. data/test/integration_tests/standalone_tests.rb +4 -0
  113. data/test/ruby/shared/rails/analytics_logging_extensions_sharedspec.rb +22 -0
  114. data/test/stub/rails3.0/config/initializers/passenger.rb +2 -1
  115. data/test/stub/rails3.1/config/initializers/passenger.rb +2 -1
  116. data/test/stub/rails3.2/config/initializers/passenger.rb +2 -1
  117. data/test/stub/rails4.0/config/initializers/passenger.rb +5 -1
  118. data/test/stub/wsgi/passenger_wsgi.py +5 -0
  119. metadata +32 -7
  120. metadata.gz.asc +7 -7
  121. data/resources/templates/apache2/run_installer_as_root.txt.erb +0 -8
@@ -30,7 +30,7 @@ module PhusionPassenger
30
30
 
31
31
  PACKAGE_NAME = 'passenger'
32
32
  # Run 'rake ext/common/Constants.h' after changing this number.
33
- VERSION_STRING = '4.0.14'
33
+ VERSION_STRING = '4.0.16'
34
34
 
35
35
  PREFERRED_NGINX_VERSION = '1.4.2'
36
36
  NGINX_SHA256_CHECKSUM = '5361ffb7b0ebf8b1a04369bc3d1295eaed091680c1c58115f88d56c8e51f3611'
@@ -0,0 +1,104 @@
1
+ # Phusion Passenger - https://www.phusionpassenger.com/
2
+ # Copyright (c) 2013 Phusion
3
+ #
4
+ # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ # THE SOFTWARE.
23
+
24
+ # This file defines all supported Apache per-directory configuration options. The
25
+ # build system automatically generates the corresponding Apache module boilerplate
26
+ # code from the definitions in this file.
27
+ #
28
+ # Main configuration options are not defined in this file, but are defined in
29
+ # ext/apache2/Configuraion.cpp instead.
30
+ #
31
+ # The following boilerplate code is generated:
32
+ #
33
+ # * command_rec array members (ConfigurationCommands.cpp.erb)
34
+ #
35
+ # Options:
36
+ #
37
+ # * name - The configuration option name. Required.
38
+ # * context - The context in which this configuration option is valid.
39
+ # Defaults to ["OR_OPTIONS", "ACCESS_CONF", "RSRC_CONF"]
40
+ # * type - This configuration option's value type. Allowed types:
41
+ # :string, :integer, :flag
42
+ # * min_value - If `type` is :integer, then this specifies the minimum
43
+ # allowed value. When nil (the default), there is no minimum.
44
+ # * desc - A description for this configuration option. Required.
45
+
46
+ APACHE2_DIRECTORY_CONFIGURATION_OPTIONS = [
47
+ {
48
+ :name => "PassengerRuby",
49
+ :type => :string,
50
+ :desc => "The Ruby interpreter to use."
51
+ },
52
+ {
53
+ :name => "PassengerMinInstances",
54
+ :type => :integer,
55
+ :context => ["OR_LIMIT", "ACCESS_CONF", "RSRC_CONF"],
56
+ :min_value => 0,
57
+ :desc => "The minimum number of application instances to keep when cleaning idle instances."
58
+ },
59
+ {
60
+ :name => "PassengerUser",
61
+ :type => :string,
62
+ :context => ["ACCESS_CONF", "RSRC_CONF"],
63
+ :desc => "The user that Ruby applications must run as."
64
+ },
65
+ {
66
+ :name => "PassengerGroup",
67
+ :type => :string,
68
+ :context => ["ACCESS_CONF", "RSRC_CONF"],
69
+ :desc => "The group that Ruby applications must run as."
70
+ },
71
+ {
72
+ :name => "PassengerMaxRequests",
73
+ :type => :integer,
74
+ :context => ["OR_LIMIT", "ACCESS_CONF", "RSRC_CONF"],
75
+ :min_value => 0,
76
+ :desc => "The maximum number of requests that an application instance may process."
77
+ },
78
+ {
79
+ :name => "PassengerStartTimeout",
80
+ :type => :integer,
81
+ :context => ["OR_LIMIT", "ACCESS_CONF", "RSRC_CONF"],
82
+ :min_value => 1,
83
+ :desc => "A timeout for application startup."
84
+ },
85
+ {
86
+ :name => "PassengerHighPerformance",
87
+ :type => :flag,
88
+ :context => ["OR_ALL"],
89
+ :desc => "Enable or disable Passenger's high performance mode."
90
+ },
91
+ {
92
+ :name => "PassengerEnabled",
93
+ :type => :flag,
94
+ :context => ["OR_ALL"],
95
+ :desc => "Enable or disable Phusion Passenger."
96
+ },
97
+ {
98
+ :name => "PassengerMaxRequestQueueSize",
99
+ :type => :integer,
100
+ :min_value => 0,
101
+ :context => ["OR_ALL"],
102
+ :desc => "The maximum number of queued requests."
103
+ }
104
+ ]
@@ -39,6 +39,7 @@ module PhusionPassenger
39
39
  DEFAULT_PYTHON = "python"
40
40
  DEFAULT_MAX_POOL_SIZE = 6
41
41
  DEFAULT_POOL_IDLE_TIME = 300
42
+ DEFAULT_START_TIMEOUT = 90_000
42
43
  DEFAULT_MAX_INSTANCES_PER_APP = 0
43
44
  DEFAULT_WEB_APP_USER = "nobody"
44
45
  DEFAULT_ANALYTICS_LOG_USER = DEFAULT_WEB_APP_USER
@@ -65,6 +66,13 @@ module PhusionPassenger
65
66
 
66
67
  # Misc
67
68
  FEEDBACK_FD = 3
69
+ STANDALONE_NGINX_CONFIGURE_OPTIONS =
70
+ "--with-cc-opt='-Wno-error' " <<
71
+ "--without-http_fastcgi_module " <<
72
+ "--without-http_scgi_module " <<
73
+ "--without-http_uwsgi_module " <<
74
+ "--with-http_gzip_static_module " <<
75
+ "--with-http_stub_status_module"
68
76
  end
69
77
 
70
78
  SharedConstants.constants.each do |name|
@@ -185,8 +185,15 @@ private
185
185
  end
186
186
 
187
187
  def compile_and_load
188
+ if ENV['PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY'] == '0'
189
+ STDERR.puts "*** Phusion Passenger: PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY set, " +
190
+ "not compiling native_support"
191
+ return false
192
+ end
193
+
188
194
  STDERR.puts "*** Phusion Passenger: no #{library_name} found for " +
189
- "the current Ruby interpreter. Compiling one..."
195
+ "the current Ruby interpreter. Compiling one (set " +
196
+ "PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable)..."
190
197
 
191
198
  require 'fileutils'
192
199
  require 'phusion_passenger/platform_info/ruby'
@@ -196,6 +203,7 @@ private
196
203
  require "#{target_dir}/#{library_name}"
197
204
  else
198
205
  STDERR.puts "Ruby native_support extension not loaded. Continuing without native_support."
206
+ return false
199
207
  end
200
208
  end
201
209
 
@@ -0,0 +1,328 @@
1
+ # Phusion Passenger - https://www.phusionpassenger.com/
2
+ # Copyright (c) 2013 Phusion
3
+ #
4
+ # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ # THE SOFTWARE.
23
+
24
+ # This file defines all supported Nginx per-location configuration options. The
25
+ # build system automatically generates the corresponding Nginx module boilerplate
26
+ # code from the definitions in this file.
27
+ #
28
+ # Main configuration options are not defined in this file, but are defined in
29
+ # ext/nginx/Configuraion.c instead.
30
+ #
31
+ # The following boilerplate code is generated:
32
+ #
33
+ # * ngx_command_t array members (ConfigurationCommands.c.erb)
34
+ # * Location configuration structure definition (ConfigurationFields.h.erb)
35
+ # * Location configuration structure initialization (CreateLocationConfig.c.erb)
36
+ # * Location configuration merging (MergeLocationConfig.c.erb)
37
+ # * Conversion of configuration options to CGI headers (CacheLocationConfig.c.erb)
38
+ #
39
+ # Options:
40
+ #
41
+ # * name - The configuration option name. Required.
42
+ # * context - The context in which this configuration option is valid.
43
+ # Defaults to [:main, :srv, :loc, :lif]
44
+ # * type - This configuration option's value type. Allowed types:
45
+ # :string, :integer, :flag, :string_array, :string_keyval
46
+ # * take - Tells Nginx how many parameters and what kind of parameter
47
+ # this configuration option takes. It should be set to a string
48
+ # such as "NGX_CONF_FLAG".
49
+ # By default this is automatically inferred from `type`: for
50
+ # example if `type` is :string then ConfigurationCommands.c.erb
51
+ # will infer that `NGX_CONF_TAKE1` should be used.
52
+ # * function - The name of the function that should be used to store the
53
+ # configuration value into the corresponding structure. This function
54
+ # is not auto-generated, so it must be the name of an existing
55
+ # function. By default, the function name is automatically inferred
56
+ # from `type`. For example if `type` is string then `function` is
57
+ # inferred to be `ngx_conf_set_str_slot`.
58
+ # If you set this to a string then you are responsible for defining
59
+ # said function in Configuration.c.
60
+ # * struct - The type of the struct that the field is contained in. Something like
61
+ # "NGX_HTTP_LOC_CONF_OFFSET" (which is also the default).
62
+ # * field - The name that should be used for the auto-generated field in
63
+ # the location configuration structure. Defaults to the configuration
64
+ # name without the 'passenger_' prefix. Set this to nil if you do not
65
+ # want a structure field to be auto-generated. If the field name contains
66
+ # a dot (.e.g `upstream_config.pass_headers`) then the structure field will
67
+ # also not be auto-generated, because it is assumed to belong to an existing
68
+ # structure field.
69
+ # * header - The name of the corresponding CGI header. By default CGI header
70
+ # generation code is automatically generated, using the configuration
71
+ # option's name in uppercase as the CGI header name.
72
+ # Setting this to nil, or setting `field` to a value containing a dot,
73
+ # will disable auto-generation of CGI header generation code. You are
74
+ # then responsible for writing CGI header passing code yourself in
75
+ # ContentHandler.c.
76
+ # * auto_generate_nginx_merge_code - Whether location configuration merging
77
+ # code should be automatically generated. Defaults to true. If you set
78
+ # this to false then you are responsible for writing merging code
79
+ # yourself in Configuration.c.
80
+ # * alias_for - Set this if this configuration option is an alias for another
81
+ # option. Alias definitions must only have the `name` and `alias_for`
82
+ # fields, nothing else.
83
+
84
+
85
+ LOCATION_CONFIGURATION_OPTIONS = [
86
+ {
87
+ :name => 'passenger_enabled',
88
+ :context => [:srv, :loc, :lif],
89
+ :type => :flag,
90
+ :function => 'passenger_enabled',
91
+ :field => 'enabled',
92
+ :header => nil
93
+ },
94
+ {
95
+ :name => 'passenger_ruby',
96
+ :context => [:srv, :loc, :lif],
97
+ :type => :string
98
+ },
99
+ {
100
+ :name => 'passenger_python',
101
+ :type => :string
102
+ },
103
+ {
104
+ :name => 'passenger_app_env',
105
+ :type => :string,
106
+ :field => 'environment',
107
+ :header => 'PASSENGER_ENV'
108
+ },
109
+ {
110
+ :name => 'passenger_friendly_error_pages',
111
+ :type => :flag
112
+ },
113
+ {
114
+ :name => 'passenger_min_instances',
115
+ :type => :integer
116
+ },
117
+ {
118
+ :name => 'passenger_max_requests',
119
+ :type => :integer
120
+ },
121
+ {
122
+ :name => 'passenger_start_timeout',
123
+ :type => :integer
124
+ },
125
+ {
126
+ :name => 'passenger_base_uri',
127
+ :type => :string_array,
128
+ :field => 'base_uris',
129
+ :header => nil,
130
+ :auto_generate_nginx_merge_code => false
131
+ },
132
+ {
133
+ :name => 'passenger_user',
134
+ :type => :string
135
+ },
136
+ {
137
+ :name => 'passenger_group',
138
+ :type => :string
139
+ },
140
+ {
141
+ :name => 'passenger_app_group_name',
142
+ :type => :string
143
+ },
144
+ {
145
+ :name => 'passenger_app_root',
146
+ :type => :string
147
+ },
148
+ {
149
+ :name => 'passenger_app_rights',
150
+ :type => :string
151
+ },
152
+ {
153
+ :name => 'union_station_support',
154
+ :type => :flag
155
+ },
156
+ {
157
+ :name => 'union_station_filter',
158
+ :take => 'NGX_CONF_TAKE1',
159
+ :type => :string_array,
160
+ :function => 'union_station_filter',
161
+ :field => 'union_station_filters',
162
+ :header => nil,
163
+ :auto_generate_nginx_merge_code => false
164
+ },
165
+ {
166
+ :name => 'passenger_debugger',
167
+ :type => :flag
168
+ },
169
+ {
170
+ :name => 'passenger_show_version_in_header',
171
+ :type => :flag
172
+ },
173
+ {
174
+ :name => 'passenger_max_preloader_idle_time',
175
+ :type => :integer
176
+ },
177
+ {
178
+ :name => 'passenger_ignore_headers',
179
+ :take => 'NGX_CONF_1MORE',
180
+ :function => 'ngx_conf_set_bitmask_slot',
181
+ :field => 'upstream_config.ignore_headers'
182
+ },
183
+ {
184
+ :name => 'passenger_set_cgi_param',
185
+ :type => :string_keyval,
186
+ :field => 'vars_source',
187
+ :header => nil,
188
+ :auto_generate_nginx_merge_code => false
189
+ },
190
+ {
191
+ :name => 'passenger_pass_header',
192
+ :type => :string_array,
193
+ :field => 'upstream_config.pass_headers'
194
+ },
195
+ {
196
+ :name => 'passenger_ignore_client_abort',
197
+ :type => :flag,
198
+ :field => 'upstream_config.ignore_client_abort'
199
+ },
200
+ {
201
+ :name => 'passenger_buffer_response',
202
+ :type => :flag,
203
+ :field => 'upstream_config.buffering'
204
+ },
205
+ {
206
+ :name => 'passenger_buffer_size',
207
+ :take => 'NGX_CONF_TAKE1',
208
+ :function => 'ngx_conf_set_size_slot',
209
+ :field => 'upstream_config.buffer_size'
210
+ },
211
+ {
212
+ :name => 'passenger_buffers',
213
+ :take => 'NGX_CONF_TAKE2',
214
+ :function => 'ngx_conf_set_bufs_slot',
215
+ :field => 'upstream_config.bufs'
216
+ },
217
+ {
218
+ :name => 'passenger_busy_buffers_size',
219
+ :take => 'NGX_CONF_TAKE1',
220
+ :function => 'ngx_conf_set_size_slot',
221
+ :field => 'upstream_config.busy_buffers_size_conf'
222
+ },
223
+ {
224
+ :name => 'passenger_intercept_errors',
225
+ :type => :flag,
226
+ :field => 'upstream_config.intercept_errors'
227
+ },
228
+ {
229
+ :name => 'passenger_spawn_method',
230
+ :type => :string
231
+ },
232
+ {
233
+ :name => 'union_station_key',
234
+ :type => :string
235
+ },
236
+ {
237
+ :name => 'passenger_max_request_queue_size',
238
+ :type => :integer
239
+ },
240
+ {
241
+ :name => 'passenger_request_queue_overflow_status_code',
242
+ :type => :integer
243
+ },
244
+
245
+ ###### Enterprise features ######
246
+ {
247
+ :context => [:main],
248
+ :name => 'passenger_fly_with',
249
+ :type => :string,
250
+ :struct => "NGX_HTTP_MAIN_CONF_OFFSET",
251
+ :function => 'passenger_enterprise_only',
252
+ :field => nil
253
+ },
254
+ {
255
+ :name => 'passenger_max_instances',
256
+ :type => :integer,
257
+ :function => 'passenger_enterprise_only',
258
+ :field => nil
259
+ },
260
+ {
261
+ :name => 'passenger_max_request_time',
262
+ :type => :integer,
263
+ :function => 'passenger_enterprise_only',
264
+ :field => nil
265
+ },
266
+ {
267
+ :name => 'passenger_memory_limit',
268
+ :type => :integer,
269
+ :function => 'passenger_enterprise_only',
270
+ :field => nil
271
+ },
272
+ {
273
+ :name => 'passenger_concurrency_model',
274
+ :type => :string,
275
+ :function => 'passenger_enterprise_only',
276
+ :field => nil
277
+ },
278
+ {
279
+ :name => 'passenger_thread_count',
280
+ :type => :integer,
281
+ :function => 'passenger_enterprise_only',
282
+ :field => nil
283
+ },
284
+ {
285
+ :name => 'passenger_rolling_restarts',
286
+ :type => :flag,
287
+ :function => 'passenger_enterprise_only',
288
+ :field => nil
289
+ },
290
+ {
291
+ :name => 'passenger_resist_deployment_errors',
292
+ :type => :flag,
293
+ :function => 'passenger_enterprise_only',
294
+ :field => nil
295
+ },
296
+
297
+ ###### Aliases for backwards compatibility ######
298
+ {
299
+ :name => 'rails_spawn_method',
300
+ :alias_for => 'passenger_spawn_method'
301
+ },
302
+ {
303
+ :name => 'rails_env',
304
+ :alias_for => 'passenger_app_env'
305
+ },
306
+ {
307
+ :name => 'rack_env',
308
+ :alias_for => 'passenger_app_env'
309
+ },
310
+ {
311
+ :name => 'rails_app_spawner_idle_time',
312
+ :alias_for => 'passenger_max_preloader_idle_time'
313
+ },
314
+
315
+ ###### Obsolete options ######
316
+ {
317
+ :name => 'rails_framework_spawner_idle_time',
318
+ :take => 'NGX_CONF_TAKE1',
319
+ :function => 'rails_framework_spawner_idle_time',
320
+ :field => nil
321
+ },
322
+ {
323
+ :name => 'passenger_use_global_queue',
324
+ :take => 'NGX_CONF_FLAG',
325
+ :function => 'passenger_use_global_queue',
326
+ :field => nil
327
+ }
328
+ ]