passenger 4.0.45 → 4.0.46
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +19 -0
- data/CHANGELOG +47 -0
- data/CONTRIBUTING.md +9 -1
- data/CONTRIBUTORS +4 -0
- data/Vagrantfile +7 -3
- data/build/agents.rb +1 -0
- data/build/misc.rb +6 -4
- data/dev/vagrant/bashrc +2 -0
- data/doc/Design and Architecture.txt +9 -7
- data/doc/Users guide Apache.idmap.txt +2 -0
- data/doc/Users guide Apache.txt +24 -4
- data/doc/Users guide Nginx.idmap.txt +4 -0
- data/doc/Users guide Nginx.txt +23 -4
- data/doc/images/code_walkthrough.jpg +0 -0
- data/doc/users_guide_snippets/installation.txt +38 -0
- data/ext/common/AgentsStarter.h +6 -1
- data/ext/common/ApplicationPool2/Common.h +17 -2
- data/ext/common/ApplicationPool2/DirectSpawner.h +5 -11
- data/ext/common/ApplicationPool2/DummySpawner.h +2 -4
- data/ext/common/ApplicationPool2/ErrorRenderer.h +119 -0
- data/ext/common/ApplicationPool2/Implementation.cpp +159 -11
- data/ext/common/ApplicationPool2/Options.h +16 -7
- data/ext/common/ApplicationPool2/Pool.h +28 -24
- data/ext/common/ApplicationPool2/Process.h +1 -9
- data/ext/common/ApplicationPool2/SmartSpawner.h +15 -18
- data/ext/common/ApplicationPool2/Spawner.h +18 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +12 -30
- data/ext/common/Constants.h +1 -1
- data/ext/common/Exceptions.h +15 -2
- data/ext/common/UnionStation/Core.h +9 -0
- data/ext/common/Utils/JsonUtils.h +53 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +1 -1
- data/ext/common/Utils/SpeedMeter.h +7 -3
- data/ext/common/Utils/SystemMetricsCollector.h +8 -6
- data/ext/common/agents/HelperAgent/Main.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +115 -56
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +6 -1
- data/ext/nginx/ContentHandler.c +2 -1
- data/ext/nginx/config +1 -1
- data/helper-scripts/node-loader.js +23 -0
- data/helper-scripts/wsgi-loader.py +12 -4
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/active_support3_extensions/init.rb +39 -78
- data/lib/phusion_passenger/constants.rb +3 -1
- data/lib/phusion_passenger/loader_shared_helpers.rb +10 -5
- data/lib/phusion_passenger/nginx/config_options.rb +3 -1
- data/lib/phusion_passenger/packaging.rb +1 -0
- data/lib/phusion_passenger/public_api.rb +108 -16
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +1 -0
- data/lib/phusion_passenger/request_handler.rb +2 -2
- data/lib/phusion_passenger/request_handler/thread_handler.rb +28 -46
- data/lib/phusion_passenger/standalone/command.rb +8 -1
- data/lib/phusion_passenger/standalone/main.rb +0 -1
- data/lib/phusion_passenger/standalone/start_command.rb +4 -0
- data/lib/phusion_passenger/union_station/connection.rb +67 -0
- data/lib/phusion_passenger/{analytics_logger.rb → union_station/core.rb} +55 -256
- data/lib/phusion_passenger/union_station/transaction.rb +168 -0
- data/lib/phusion_passenger/utils.rb +4 -0
- data/lib/phusion_passenger/utils/lock.rb +62 -0
- data/resources/mime.types +1 -0
- data/resources/templates/error_layout.html.template +2 -0
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +5 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +13 -3
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +16 -13
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +6 -0
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/RequestHandlerTest.cpp +158 -2
- data/test/cxx/ServerInstanceDirTest.cpp +2 -0
- data/test/cxx/TestSupport.h +21 -2
- data/test/cxx/UtilsTest.cpp +1 -0
- data/test/ruby/classic_rails/loader_spec.rb +0 -1
- data/test/ruby/classic_rails/preloader_spec.rb +0 -1
- data/test/ruby/rails3.0/loader_spec.rb +2 -2
- data/test/ruby/rails3.0/preloader_spec.rb +2 -2
- data/test/ruby/rails3.1/loader_spec.rb +2 -2
- data/test/ruby/rails3.1/preloader_spec.rb +2 -2
- data/test/ruby/rails3.2/loader_spec.rb +2 -2
- data/test/ruby/rails3.2/preloader_spec.rb +2 -2
- data/test/ruby/rails4.0/loader_spec.rb +2 -2
- data/test/ruby/rails4.0/preloader_spec.rb +2 -2
- data/test/ruby/request_handler_spec.rb +8 -8
- data/test/ruby/shared/rails/{analytics_logging_extensions_sharedspec.rb → union_station_extensions_sharedspec.rb} +5 -4
- data/test/ruby/union_station_spec.rb +283 -0
- data/test/stub/wsgi/passenger_wsgi.py +41 -5
- metadata +12 -7
- metadata.gz.asc +7 -7
- data/helper-scripts/wsgi-preloader.py +0 -1
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +0 -105
- data/test/ruby/analytics_logger_spec.rb +0 -283
@@ -99,6 +99,7 @@
|
|
99
99
|
options.startupFile = ".";
|
100
100
|
options.startTimeout = 300;
|
101
101
|
SpawnerPtr spawner = createSpawner(options);
|
102
|
+
setLogLevel(LVL_CRIT);
|
102
103
|
try {
|
103
104
|
process = spawner->spawn(options);
|
104
105
|
process->requiresShutdown = false;
|
@@ -117,6 +118,7 @@
|
|
117
118
|
options.startCommand = "echo\t" "!> hello world";
|
118
119
|
options.startupFile = ".";
|
119
120
|
SpawnerPtr spawner = createSpawner(options);
|
121
|
+
setLogLevel(LVL_CRIT);
|
120
122
|
try {
|
121
123
|
process = spawner->spawn(options);
|
122
124
|
process->requiresShutdown = false;
|
@@ -135,6 +137,7 @@
|
|
135
137
|
options.startCommand = "perl\t" "start_error.pl";
|
136
138
|
options.startupFile = "start_error.pl";
|
137
139
|
SpawnerPtr spawner = createSpawner(options);
|
140
|
+
setLogLevel(LVL_CRIT);
|
138
141
|
try {
|
139
142
|
process = spawner->spawn(options);
|
140
143
|
process->requiresShutdown = false;
|
@@ -157,6 +160,7 @@
|
|
157
160
|
options.startupFile = "start_error.pl";
|
158
161
|
options.startTimeout = 300;
|
159
162
|
SpawnerPtr spawner = createSpawner(options);
|
163
|
+
setLogLevel(LVL_CRIT);
|
160
164
|
try {
|
161
165
|
process = spawner->spawn(options);
|
162
166
|
process->requiresShutdown = false;
|
@@ -213,6 +217,7 @@
|
|
213
217
|
options.startupFile = ".";
|
214
218
|
options.environmentVariables.push_back(make_pair("PASSENGER_FOO", "foo"));
|
215
219
|
SpawnerPtr spawner = createSpawner(options);
|
220
|
+
setLogLevel(LVL_CRIT);
|
216
221
|
try {
|
217
222
|
process = spawner->spawn(options);
|
218
223
|
process->requiresShutdown = false;
|
@@ -236,6 +241,7 @@
|
|
236
241
|
options.appRoot = "tmp.check/a/b/c/d";
|
237
242
|
options.appType = "rack";
|
238
243
|
SpawnerPtr spawner = createSpawner(options);
|
244
|
+
setLogLevel(LVL_CRIT);
|
239
245
|
|
240
246
|
if (getuid() != 0) {
|
241
247
|
// TODO: implement this test for root too
|
@@ -43,7 +43,8 @@ namespace tut {
|
|
43
43
|
|
44
44
|
RequestHandlerTest() {
|
45
45
|
createServerInstanceDirAndGeneration(serverInstanceDir, generation);
|
46
|
-
spawnerFactory = boost::make_shared<SpawnerFactory>(
|
46
|
+
spawnerFactory = boost::make_shared<SpawnerFactory>(generation,
|
47
|
+
make_shared<SpawnerConfig>(*resourceLocator));
|
47
48
|
pool = boost::make_shared<Pool>(spawnerFactory);
|
48
49
|
pool->initialize();
|
49
50
|
serverFilename = generation->getPath() + "/server";
|
@@ -1243,10 +1244,165 @@ namespace tut {
|
|
1243
1244
|
ensure_equals(io.readLine(), "Echo: hello\n");
|
1244
1245
|
}
|
1245
1246
|
|
1247
|
+
TEST_METHOD(61) {
|
1248
|
+
set_test_name("If the response contains Transfer-Encoding chunked, "
|
1249
|
+
"it dechunks the response body and forwards it until the "
|
1250
|
+
"zero-length chunk is encountered.");
|
1246
1251
|
|
1247
|
-
|
1252
|
+
init();
|
1253
|
+
connect();
|
1254
|
+
sendHeaders(defaultHeaders,
|
1255
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1256
|
+
"PATH_INFO", "/chunked",
|
1257
|
+
NULL);
|
1258
|
+
|
1259
|
+
string response = readAll(connection);
|
1260
|
+
string body = stripHeaders(response);
|
1261
|
+
ensure_equals(body,
|
1262
|
+
"chunk1\n"
|
1263
|
+
"chunk2\n"
|
1264
|
+
"chunk3\n");
|
1265
|
+
}
|
1266
|
+
|
1267
|
+
TEST_METHOD(62) {
|
1268
|
+
set_test_name("If the response contains Transfer-Encoding chunked, "
|
1269
|
+
"it closes the connection with the app when the zero-length chunk is encountered.");
|
1270
|
+
|
1271
|
+
DeleteFileEventually statusFile("/tmp/passenger-tail-status.txt");
|
1272
|
+
createFile("/tmp/passenger-tail-status.txt", "",
|
1273
|
+
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
1274
|
+
|
1275
|
+
init();
|
1276
|
+
connect();
|
1277
|
+
sendHeaders(defaultHeaders,
|
1278
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1279
|
+
"PATH_INFO", "/chunked",
|
1280
|
+
"HTTP_X_SLEEP_WHEN_DONE", "0.01",
|
1281
|
+
"HTTP_X_EXTRA_DATA", "true",
|
1282
|
+
"HTTP_X_TAIL_STATUS_FILE", "/tmp/passenger-tail-status.txt",
|
1283
|
+
NULL);
|
1284
|
+
|
1285
|
+
string response = readAll(connection);
|
1286
|
+
string body = stripHeaders(response);
|
1287
|
+
ensure_equals(body,
|
1288
|
+
"chunk1\n"
|
1289
|
+
"chunk2\n"
|
1290
|
+
"chunk3\n");
|
1291
|
+
EVENTUALLY(5,
|
1292
|
+
result = readAll("/tmp/passenger-tail-status.txt") == "False";
|
1293
|
+
);
|
1294
|
+
}
|
1295
|
+
|
1296
|
+
TEST_METHOD(63) {
|
1297
|
+
set_test_name("If the response contains Transfer-Encoding chunked, "
|
1298
|
+
"it discards any additional response body data after the zero-length chunk is encountered.");
|
1299
|
+
|
1300
|
+
init();
|
1301
|
+
connect();
|
1302
|
+
sendHeaders(defaultHeaders,
|
1303
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1304
|
+
"PATH_INFO", "/chunked",
|
1305
|
+
"HTTP_X_EXTRA_DATA", "true",
|
1306
|
+
NULL);
|
1307
|
+
|
1308
|
+
string response = readAll(connection);
|
1309
|
+
string body = stripHeaders(response);
|
1310
|
+
ensure_equals(body,
|
1311
|
+
"chunk1\n"
|
1312
|
+
"chunk2\n"
|
1313
|
+
"chunk3\n");
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
TEST_METHOD(64) {
|
1317
|
+
set_test_name("If the response contains Content-Length, "
|
1318
|
+
"it forwards exactly Content-Length bytes of the response body.");
|
1319
|
+
|
1320
|
+
init();
|
1321
|
+
connect();
|
1322
|
+
sendHeaders(defaultHeaders,
|
1323
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1324
|
+
"PATH_INFO", "/blob",
|
1325
|
+
"HTTP_X_SIZE", "5000000",
|
1326
|
+
"HTTP_X_CONTENT_LENGTH", "true",
|
1327
|
+
NULL);
|
1328
|
+
|
1329
|
+
string response = readAll(connection);
|
1330
|
+
string body = stripHeaders(response);
|
1331
|
+
FILE *f = fopen("/tmp/debug.txt", "w");
|
1332
|
+
fwrite(response.data(), 1, response.size(), f);
|
1333
|
+
fclose(f);
|
1334
|
+
ensure_equals(body.size(), 5000000u);
|
1335
|
+
}
|
1248
1336
|
|
1249
1337
|
TEST_METHOD(65) {
|
1338
|
+
set_test_name("If the response contains Content-Length, "
|
1339
|
+
"it closes the connection with the app after forwarding exactly Content-Length bytes.");
|
1340
|
+
|
1341
|
+
DeleteFileEventually statusFile("/tmp/passenger-tail-status.txt");
|
1342
|
+
createFile("/tmp/passenger-tail-status.txt", "",
|
1343
|
+
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
1344
|
+
|
1345
|
+
init();
|
1346
|
+
connect();
|
1347
|
+
sendHeaders(defaultHeaders,
|
1348
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1349
|
+
"PATH_INFO", "/blob",
|
1350
|
+
"HTTP_X_SIZE", "5000000",
|
1351
|
+
"HTTP_X_CONTENT_LENGTH", "true",
|
1352
|
+
"HTTP_X_SLEEP_WHEN_DONE", "0.01",
|
1353
|
+
"HTTP_X_EXTRA_DATA", "true",
|
1354
|
+
"HTTP_X_TAIL_STATUS_FILE", "/tmp/passenger-tail-status.txt",
|
1355
|
+
NULL);
|
1356
|
+
|
1357
|
+
string response = readAll(connection);
|
1358
|
+
string body = stripHeaders(response);
|
1359
|
+
ensure_equals(body.size(), 5000000u);
|
1360
|
+
EVENTUALLY(5,
|
1361
|
+
result = readAll("/tmp/passenger-tail-status.txt") == "False";
|
1362
|
+
);
|
1363
|
+
}
|
1364
|
+
|
1365
|
+
TEST_METHOD(66) {
|
1366
|
+
set_test_name("If the response contains Content-Length, "
|
1367
|
+
"it discards any additional response body data after Content-Length bytes.");
|
1368
|
+
|
1369
|
+
init();
|
1370
|
+
connect();
|
1371
|
+
sendHeaders(defaultHeaders,
|
1372
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1373
|
+
"PATH_INFO", "/blob",
|
1374
|
+
"HTTP_X_SIZE", "5000000",
|
1375
|
+
"HTTP_X_CONTENT_LENGTH", "true",
|
1376
|
+
"HTTP_X_EXTRA_DATA", "true",
|
1377
|
+
NULL);
|
1378
|
+
|
1379
|
+
string response = readAll(connection);
|
1380
|
+
string body = stripHeaders(response);
|
1381
|
+
ensure_equals(body.size(), 5000000u);
|
1382
|
+
}
|
1383
|
+
|
1384
|
+
TEST_METHOD(67) {
|
1385
|
+
set_test_name("If the response contains neither Transfer-Encoding chunked nor Content-Length, "
|
1386
|
+
"it forwards the response body until EOF.");
|
1387
|
+
|
1388
|
+
init();
|
1389
|
+
connect();
|
1390
|
+
sendHeaders(defaultHeaders,
|
1391
|
+
"PASSENGER_APP_ROOT", wsgiAppPath.c_str(),
|
1392
|
+
"PATH_INFO", "/blob",
|
1393
|
+
"HTTP_X_SIZE", "5000000",
|
1394
|
+
"HTTP_X_EXTRA_DATA", "true",
|
1395
|
+
NULL);
|
1396
|
+
|
1397
|
+
string response = readAll(connection);
|
1398
|
+
string body = stripHeaders(response);
|
1399
|
+
ensure_equals(body.size(), 5000004u);
|
1400
|
+
}
|
1401
|
+
|
1402
|
+
|
1403
|
+
/***** Out-of-band work tests *****/
|
1404
|
+
|
1405
|
+
TEST_METHOD(75) {
|
1250
1406
|
set_test_name("If the application outputs a request oobw header, handler should remove the header, mark "
|
1251
1407
|
"the process as oobw requested. The process should continue to process requests until the "
|
1252
1408
|
"spawner spawns another process (to avoid the group being empty). As soon as the new "
|
@@ -27,6 +27,7 @@ namespace tut {
|
|
27
27
|
// The (string) constructor creates a ServerInstanceDir object that's
|
28
28
|
// associated with the given directory, and creates the directory
|
29
29
|
// if it doesn't exist.
|
30
|
+
DONT_RUN_IN_VAGRANT();
|
30
31
|
ServerInstanceDir dir(parentDir + "/passenger-test.1234");
|
31
32
|
ServerInstanceDir dir2(dir.getPath());
|
32
33
|
ServerInstanceDir dir3(parentDir + "/foo");
|
@@ -167,6 +168,7 @@ namespace tut {
|
|
167
168
|
TEST_METHOD(14) {
|
168
169
|
// It's possible to have two ServerInstanceDir objects constructed
|
169
170
|
// with the same (pid_t, string) constructor arguments.
|
171
|
+
DONT_RUN_IN_VAGRANT();
|
170
172
|
ServerInstanceDir dir(parentDir + "/passenger-test.1234");
|
171
173
|
ServerInstanceDir dir2(parentDir + "/passenger-test.1234");
|
172
174
|
}
|
data/test/cxx/TestSupport.h
CHANGED
@@ -86,6 +86,15 @@ using namespace oxt;
|
|
86
86
|
} \
|
87
87
|
} while (0)
|
88
88
|
|
89
|
+
// Do not run some tests in the Vagrant development environment because
|
90
|
+
// they don't work over NFS.
|
91
|
+
#define DONT_RUN_IN_VAGRANT() \
|
92
|
+
do { \
|
93
|
+
if (getenv("PASSENGER_VAGRANT_ENVIRONMENT") != NULL) { \
|
94
|
+
return; \
|
95
|
+
} \
|
96
|
+
} while (false)
|
97
|
+
|
89
98
|
|
90
99
|
extern ResourceLocator *resourceLocator;
|
91
100
|
extern Json::Value testConfig;
|
@@ -154,8 +163,9 @@ string getPrimaryGroupName(const string &username);
|
|
154
163
|
class TempDir {
|
155
164
|
private:
|
156
165
|
string name;
|
166
|
+
bool ignoreRemoveErrors;
|
157
167
|
public:
|
158
|
-
TempDir(const string &name) {
|
168
|
+
TempDir(const string &name, bool _ignoreRemoveErrors = false) {
|
159
169
|
this->name = name;
|
160
170
|
if (mkdir(name.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) != 0 && errno != EEXIST) {
|
161
171
|
int e = errno;
|
@@ -164,10 +174,19 @@ public:
|
|
164
174
|
message.append("'");
|
165
175
|
throw FileSystemException(message, e, name);
|
166
176
|
}
|
177
|
+
ignoreRemoveErrors = _ignoreRemoveErrors;
|
167
178
|
}
|
168
179
|
|
169
180
|
~TempDir() {
|
170
|
-
|
181
|
+
if (ignoreRemoveErrors) {
|
182
|
+
try {
|
183
|
+
removeDirTree(name);
|
184
|
+
} catch (const RuntimeException &) {
|
185
|
+
// Do nothing.
|
186
|
+
}
|
187
|
+
} else {
|
188
|
+
removeDirTree(name);
|
189
|
+
}
|
171
190
|
}
|
172
191
|
};
|
173
192
|
|
data/test/cxx/UtilsTest.cpp
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
module PhusionPassenger
|
6
6
|
|
@@ -20,7 +20,7 @@ describe "Rack loader with Rails 3.0" do
|
|
20
20
|
return "3.0"
|
21
21
|
end
|
22
22
|
|
23
|
-
include_examples "
|
23
|
+
include_examples "Union Station extensions for Rails"
|
24
24
|
end
|
25
25
|
|
26
26
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
module PhusionPassenger
|
6
6
|
|
@@ -26,7 +26,7 @@ describe "Rack loader with Rails 3.0" do
|
|
26
26
|
return "3.0"
|
27
27
|
end
|
28
28
|
|
29
|
-
include_examples "
|
29
|
+
include_examples "Union Station extensions for Rails"
|
30
30
|
end
|
31
31
|
|
32
32
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
module PhusionPassenger
|
6
6
|
|
@@ -20,7 +20,7 @@ describe "Rack loader with Rails 3.1" do
|
|
20
20
|
return "3.1"
|
21
21
|
end
|
22
22
|
|
23
|
-
include_examples "
|
23
|
+
include_examples "Union Station extensions for Rails"
|
24
24
|
end
|
25
25
|
|
26
26
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
module PhusionPassenger
|
6
6
|
|
@@ -26,7 +26,7 @@ describe "Rack loader with Rails 3.1" do
|
|
26
26
|
return "3.1"
|
27
27
|
end
|
28
28
|
|
29
|
-
include_examples "
|
29
|
+
include_examples "Union Station extensions for Rails"
|
30
30
|
end
|
31
31
|
|
32
32
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
module PhusionPassenger
|
6
6
|
|
@@ -20,7 +20,7 @@ describe "Rack loader with Rails 3.2" do
|
|
20
20
|
return "3.2"
|
21
21
|
end
|
22
22
|
|
23
|
-
include_examples "
|
23
|
+
include_examples "Union Station extensions for Rails"
|
24
24
|
end
|
25
25
|
|
26
26
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
module PhusionPassenger
|
6
6
|
|
@@ -26,7 +26,7 @@ describe "Rack loader with Rails 3.2" do
|
|
26
26
|
return "3.2"
|
27
27
|
end
|
28
28
|
|
29
|
-
include_examples "
|
29
|
+
include_examples "Union Station extensions for Rails"
|
30
30
|
end
|
31
31
|
|
32
32
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
if RUBY_VERSION_INT >= 190
|
6
6
|
module PhusionPassenger
|
@@ -21,7 +21,7 @@ describe "Rack loader with Rails 4.0" do
|
|
21
21
|
return "4.0"
|
22
22
|
end
|
23
23
|
|
24
|
-
include_examples "
|
24
|
+
include_examples "Union Station extensions for Rails"
|
25
25
|
end
|
26
26
|
|
27
27
|
end # module PhusionPassenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'ruby/shared/loader_sharedspec'
|
3
|
-
require 'ruby/shared/rails/
|
3
|
+
require 'ruby/shared/rails/union_station_extensions_sharedspec'
|
4
4
|
|
5
5
|
if RUBY_VERSION_INT >= 190
|
6
6
|
module PhusionPassenger
|
@@ -27,7 +27,7 @@ describe "Rack loader with Rails 4.0" do
|
|
27
27
|
return "4.0"
|
28
28
|
end
|
29
29
|
|
30
|
-
include_examples "
|
30
|
+
include_examples "Union Station extensions for Rails"
|
31
31
|
end
|
32
32
|
|
33
33
|
end # module PhusionPassenger
|