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.

Files changed (94) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +19 -0
  5. data/CHANGELOG +47 -0
  6. data/CONTRIBUTING.md +9 -1
  7. data/CONTRIBUTORS +4 -0
  8. data/Vagrantfile +7 -3
  9. data/build/agents.rb +1 -0
  10. data/build/misc.rb +6 -4
  11. data/dev/vagrant/bashrc +2 -0
  12. data/doc/Design and Architecture.txt +9 -7
  13. data/doc/Users guide Apache.idmap.txt +2 -0
  14. data/doc/Users guide Apache.txt +24 -4
  15. data/doc/Users guide Nginx.idmap.txt +4 -0
  16. data/doc/Users guide Nginx.txt +23 -4
  17. data/doc/images/code_walkthrough.jpg +0 -0
  18. data/doc/users_guide_snippets/installation.txt +38 -0
  19. data/ext/common/AgentsStarter.h +6 -1
  20. data/ext/common/ApplicationPool2/Common.h +17 -2
  21. data/ext/common/ApplicationPool2/DirectSpawner.h +5 -11
  22. data/ext/common/ApplicationPool2/DummySpawner.h +2 -4
  23. data/ext/common/ApplicationPool2/ErrorRenderer.h +119 -0
  24. data/ext/common/ApplicationPool2/Implementation.cpp +159 -11
  25. data/ext/common/ApplicationPool2/Options.h +16 -7
  26. data/ext/common/ApplicationPool2/Pool.h +28 -24
  27. data/ext/common/ApplicationPool2/Process.h +1 -9
  28. data/ext/common/ApplicationPool2/SmartSpawner.h +15 -18
  29. data/ext/common/ApplicationPool2/Spawner.h +18 -14
  30. data/ext/common/ApplicationPool2/SpawnerFactory.h +12 -30
  31. data/ext/common/Constants.h +1 -1
  32. data/ext/common/Exceptions.h +15 -2
  33. data/ext/common/UnionStation/Core.h +9 -0
  34. data/ext/common/Utils/JsonUtils.h +53 -0
  35. data/ext/common/Utils/ProcessMetricsCollector.h +1 -1
  36. data/ext/common/Utils/SpeedMeter.h +7 -3
  37. data/ext/common/Utils/SystemMetricsCollector.h +8 -6
  38. data/ext/common/agents/HelperAgent/Main.cpp +4 -4
  39. data/ext/common/agents/HelperAgent/RequestHandler.h +115 -56
  40. data/ext/nginx/ConfigurationCommands.c +1 -1
  41. data/ext/nginx/ConfigurationCommands.c.erb +6 -1
  42. data/ext/nginx/ContentHandler.c +2 -1
  43. data/ext/nginx/config +1 -1
  44. data/helper-scripts/node-loader.js +23 -0
  45. data/helper-scripts/wsgi-loader.py +12 -4
  46. data/lib/phusion_passenger.rb +1 -1
  47. data/lib/phusion_passenger/active_support3_extensions/init.rb +39 -78
  48. data/lib/phusion_passenger/constants.rb +3 -1
  49. data/lib/phusion_passenger/loader_shared_helpers.rb +10 -5
  50. data/lib/phusion_passenger/nginx/config_options.rb +3 -1
  51. data/lib/phusion_passenger/packaging.rb +1 -0
  52. data/lib/phusion_passenger/public_api.rb +108 -16
  53. data/lib/phusion_passenger/rack/thread_handler_extension.rb +1 -0
  54. data/lib/phusion_passenger/request_handler.rb +2 -2
  55. data/lib/phusion_passenger/request_handler/thread_handler.rb +28 -46
  56. data/lib/phusion_passenger/standalone/command.rb +8 -1
  57. data/lib/phusion_passenger/standalone/main.rb +0 -1
  58. data/lib/phusion_passenger/standalone/start_command.rb +4 -0
  59. data/lib/phusion_passenger/union_station/connection.rb +67 -0
  60. data/lib/phusion_passenger/{analytics_logger.rb → union_station/core.rb} +55 -256
  61. data/lib/phusion_passenger/union_station/transaction.rb +168 -0
  62. data/lib/phusion_passenger/utils.rb +4 -0
  63. data/lib/phusion_passenger/utils/lock.rb +62 -0
  64. data/resources/mime.types +1 -0
  65. data/resources/templates/error_layout.html.template +2 -0
  66. data/resources/templates/standalone/config.erb +1 -0
  67. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +5 -3
  68. data/test/cxx/ApplicationPool2/PoolTest.cpp +13 -3
  69. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +16 -13
  70. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +6 -0
  71. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  72. data/test/cxx/RequestHandlerTest.cpp +158 -2
  73. data/test/cxx/ServerInstanceDirTest.cpp +2 -0
  74. data/test/cxx/TestSupport.h +21 -2
  75. data/test/cxx/UtilsTest.cpp +1 -0
  76. data/test/ruby/classic_rails/loader_spec.rb +0 -1
  77. data/test/ruby/classic_rails/preloader_spec.rb +0 -1
  78. data/test/ruby/rails3.0/loader_spec.rb +2 -2
  79. data/test/ruby/rails3.0/preloader_spec.rb +2 -2
  80. data/test/ruby/rails3.1/loader_spec.rb +2 -2
  81. data/test/ruby/rails3.1/preloader_spec.rb +2 -2
  82. data/test/ruby/rails3.2/loader_spec.rb +2 -2
  83. data/test/ruby/rails3.2/preloader_spec.rb +2 -2
  84. data/test/ruby/rails4.0/loader_spec.rb +2 -2
  85. data/test/ruby/rails4.0/preloader_spec.rb +2 -2
  86. data/test/ruby/request_handler_spec.rb +8 -8
  87. data/test/ruby/shared/rails/{analytics_logging_extensions_sharedspec.rb → union_station_extensions_sharedspec.rb} +5 -4
  88. data/test/ruby/union_station_spec.rb +283 -0
  89. data/test/stub/wsgi/passenger_wsgi.py +41 -5
  90. metadata +12 -7
  91. metadata.gz.asc +7 -7
  92. data/helper-scripts/wsgi-preloader.py +0 -1
  93. data/lib/phusion_passenger/standalone/package_runtime_command.rb +0 -105
  94. 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
@@ -27,7 +27,7 @@ namespace tut {
27
27
  AtomicInt commitCount;
28
28
 
29
29
  FileBackedPipeTest()
30
- : tmpdir("tmp.pipe")
30
+ : tmpdir("tmp.pipe", true) // Removing the directory may not work over NFS
31
31
  {
32
32
  consumeImmediately = true;
33
33
  toConsume = 9999;
@@ -43,7 +43,8 @@ namespace tut {
43
43
 
44
44
  RequestHandlerTest() {
45
45
  createServerInstanceDirAndGeneration(serverInstanceDir, generation);
46
- spawnerFactory = boost::make_shared<SpawnerFactory>(*resourceLocator, generation);
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
- /***** Out-of-band work tests *****/
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
  }
@@ -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
- removeDirTree(name);
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
 
@@ -171,6 +171,7 @@ namespace tut {
171
171
 
172
172
  TEST_METHOD(21) {
173
173
  // It immediately unlinks the temp file.
174
+ DONT_RUN_IN_VAGRANT();
174
175
  TempDir td("utils_test.tmp");
175
176
  BufferedUpload t("utils_test.tmp");
176
177
  ensure_equals(listDir("utils_test.tmp").size(), 0u);
@@ -1,7 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
  require 'ruby/shared/loader_sharedspec'
3
3
  require 'ruby/shared/ruby_loader_sharedspec'
4
- require 'ruby/shared/rails/analytics_logging_extensions_sharedspec'
5
4
 
6
5
  module PhusionPassenger
7
6
 
@@ -1,7 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
  require 'ruby/shared/loader_sharedspec'
3
3
  require 'ruby/shared/ruby_loader_sharedspec'
4
- require 'ruby/shared/rails/analytics_logging_extensions_sharedspec'
5
4
 
6
5
  module PhusionPassenger
7
6
 
@@ -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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
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/analytics_logging_extensions_sharedspec'
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 "analytics logging extensions for Rails"
30
+ include_examples "Union Station extensions for Rails"
31
31
  end
32
32
 
33
33
  end # module PhusionPassenger