passenger 5.0.22 → 5.0.23

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZWI3MDQyYjQ2ZjdhNzk4YTcxMjUyY2U2OTE1MGVjYjI5ODhhZmRjMg==
5
- data.tar.gz: !binary |-
6
- ODQzNjNmY2RmOTk4ZTkzZWY1MWY4MmQ1NzczMjQ4NjljYThlZTQwMA==
2
+ SHA1:
3
+ metadata.gz: 9860ce906b0de7200f82e30d96333f500e57dd64
4
+ data.tar.gz: 68ecdbe231a4e6484ec1336ab395858bcb54e19a
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- Yzk5NTg3MjJiNTg2ZDIxZGVkY2FhYjZhMTZjYzRkMTk1NmRkMGY5YTA1N2Ew
10
- N2MyOGFhODhkZjZjNDE1OWU3ZjVlZDcwOGFjNjI3MmI0M2Y5ZTFjZWNiNTRm
11
- NzY0NDdlYTg2M2JkZTdhZDRlM2VlZWNiMTRkNWJjYzJkNTRiMmE=
12
- data.tar.gz: !binary |-
13
- MDg0OTg4NTAyM2NjOTMwMDIwNjlhYzA1MTBmNDc5ZTgwNjEwMGE0NTg5MjU4
14
- YzNjZDFhMmQ4YTA2YjlhOWVjNDM5NGZhMmZhYWRlYjQ5YmUwN2M3ODczNTRj
15
- YTU2ZDcwYTk3ODgwNjkwMmQ1ZDk5ZjVkNDQ2OTQ3MjEyMmU3Y2M=
6
+ metadata.gz: 8ba93ff84710a7f93351551340173219326ce2b8672172980ccc9f29dea0e5fb8120533fc1abea5a3f71bca3895e19c2813e5872ad22aef6cf4dd4d719d542be
7
+ data.tar.gz: a4293240d2581fa7d2f6b8abc2ebee0c7eedf338aff91b65a18e7d6ae2c924ef81fe1fa4fd3d15dc1ff70b09ee67513aff04daee0f706fd83d4370b5fb2cf632
data/CHANGELOG CHANGED
@@ -1,3 +1,14 @@
1
+ Release 5.0.23
2
+ --------------
3
+
4
+ * Fixes the request acceptor error handling timeout. When an error occurs while Passenger is accepting a request (for example, when Passenger has run out of file descriptors), Passenger is supposed to wait for 3 seconds before trying again. Because of a typo, Passenger actually waited 3 milliseconds.
5
+ * [Enterprise] Fixed a regression in the Passenger Standalone Nginx config template that breaks the Mass Deployment feature.
6
+ * The mime type for serving static XHTML files is updated. We no longer use the mobile profile, so it is recognized by desktop browsers. Closes GH-1695.
7
+ * Improves error messages about Ruby native support to indicate the optional nature. Passenger is able to operate even without the native support extension, but that wasn't clear enough to some users, causing them to think of the old messages as errors.
8
+ * [Standalone, Nginx] When using the new `abort_websockets_on_process_shutdown` configuration option, Passenger waited for the app to close without signaling it that shutdown was in progress. Node.js apps now get a SIGINT. Closes GH-1702.
9
+ * With friendly error pages off Passenger would still show a trace (referencing only Passenger code) for unusual spawn errors. This has been changed to a generic error message. Closes GH-1704.
10
+
11
+
1
12
  Release 5.0.22
2
13
  --------------
3
14
 
@@ -262,11 +262,7 @@ task 'package:gem' => Packaging::PREGENERATED_FILES do
262
262
  if release_file
263
263
  File.open(release_file, "w").close
264
264
  end
265
- command = "gem build #{PhusionPassenger::PACKAGE_NAME}.gemspec"
266
- if !boolean_option('SKIP_SIGNING')
267
- command << " --sign --key 0x0A212A8C"
268
- end
269
- sh(command)
265
+ sh("gem build #{PhusionPassenger::PACKAGE_NAME}.gemspec")
270
266
  ensure
271
267
  if release_file
272
268
  File.unlink(release_file) rescue nil
@@ -38,7 +38,7 @@ types {
38
38
  application/vnd.ms-excel xls;
39
39
  application/vnd.ms-powerpoint ppt;
40
40
  application/vnd.wap.wmlc wmlc;
41
- application/vnd.wap.xhtml+xml xhtml;
41
+ application/xhtml+xml xhtml;
42
42
  application/vnd.google-earth.kml+xml kml;
43
43
  application/vnd.google-earth.kmz kmz;
44
44
  application/x-cocoa cco;
@@ -56,7 +56,7 @@ http {
56
56
  <% if @app_finder.multi_mode? %>
57
57
  # Default server entry for mass deployment mode.
58
58
  server {
59
- <%= include_passenger_internal_template('mass_deployment_default_server.erb', 12) %>;
59
+ <%= include_passenger_internal_template('mass_deployment_default_server.erb', 12) %>
60
60
  }
61
61
  <% end %>
62
62
 
@@ -152,6 +152,13 @@ Group::addProcessToList(const ProcessPtr &process, ProcessList &destination) {
152
152
  } else if (&destination == &detachedProcesses) {
153
153
  assert(process->isAlive());
154
154
  process->enabled = Process::DETACHED;
155
+
156
+ if (!this->options.abortWebsocketsOnProcessShutdown && this->options.appType == P_STATIC_STRING("node")) {
157
+ // When Passenger is not allowed to abort websockets the application needs a way to know graceful shutdown
158
+ // is in progress. The solution for the most common use (Node.js) is to send a SIGINT. This is the general
159
+ // termination signal for Node; later versions of pm2 also use it (with a 1.6 sec grace period, Passenger just waits)
160
+ kill(process->getPid(), SIGINT);
161
+ }
155
162
  callAbortLongRunningConnectionsCallback(process);
156
163
  } else {
157
164
  P_BUG("Unknown destination list");
@@ -261,7 +261,7 @@ Controller::writeRequestQueueFullExceptionErrorResponse(Client *client, Request
261
261
  " due to: " << e->what());
262
262
 
263
263
  endRequestWithSimpleResponse(&client, &req,
264
- "<h1>This website is under heavy load</h1>"
264
+ "<h2>This website is under heavy load (queue full)</h2>"
265
265
  "<p>We're sorry, too many people are accessing this website at the same "
266
266
  "time. We're working on this problem. Please try again later.</p>",
267
267
  requestQueueOverflowStatusCode);
@@ -295,9 +295,6 @@ Controller::writeOtherExceptionErrorResponse(Client *client, Request *req, const
295
295
  typeName = typeid(*e).name();
296
296
  #endif
297
297
 
298
- SKC_WARN(client, "Cannot checkout session (exception type " <<
299
- typeName << "): " << e->what());
300
-
301
298
  const unsigned int exceptionMessageLen = strlen(e->what());
302
299
  string backtrace;
303
300
  boost::shared_ptr<tracable_exception> e3 = dynamic_pointer_cast<tracable_exception>(e);
@@ -305,23 +302,33 @@ Controller::writeOtherExceptionErrorResponse(Client *client, Request *req, const
305
302
  backtrace = e3->backtrace();
306
303
  }
307
304
 
308
- const unsigned int BUFFER_SIZE = 512 + typeName.size() +
309
- exceptionMessageLen + backtrace.size();
310
- char *buf = (char *) psg_pnalloc(req->pool, BUFFER_SIZE);
311
- char *pos = buf;
312
- const char *end = buf + BUFFER_SIZE;
313
-
314
- pos = appendData(pos, end, "An internal error occurred while trying to spawn the application.\n");
315
- pos = appendData(pos, end, "Exception type: ");
316
- pos = appendData(pos, end, typeName);
317
- pos = appendData(pos, end, "\nError message: ");
318
- pos = appendData(pos, end, e->what(), exceptionMessageLen);
319
- if (!backtrace.empty()) {
320
- pos = appendData(pos, end, "\nBacktrace:\n");
321
- pos = appendData(pos, end, backtrace);
322
- }
305
+ SKC_WARN(client, "Cannot checkout session due to " <<
306
+ typeName << ": " << e->what() << (!backtrace.empty() ? "\n" + backtrace : ""));
323
307
 
324
- endRequestWithSimpleResponse(&client, &req, StaticString(buf, pos - buf), 500);
308
+ if (friendlyErrorPagesEnabled(req)) {
309
+ const unsigned int BUFFER_SIZE = 512 + typeName.size() +
310
+ exceptionMessageLen + backtrace.size();
311
+ char *buf = (char *) psg_pnalloc(req->pool, BUFFER_SIZE);
312
+ char *pos = buf;
313
+ const char *end = buf + BUFFER_SIZE;
314
+
315
+ pos = appendData(pos, end, "<h2>Internal server error</h2>");
316
+ pos = appendData(pos, end, "<p>Application could not be started.</p>");
317
+ pos = appendData(pos, end, "<p>Exception type: ");
318
+ pos = appendData(pos, end, typeName);
319
+ pos = appendData(pos, end, "<br>Error message: ");
320
+ pos = appendData(pos, end, e->what(), exceptionMessageLen);
321
+ if (!backtrace.empty()) {
322
+ pos = appendData(pos, end, "<br>Backtrace:<br>");
323
+ pos = appendData(pos, end, backtrace);
324
+ }
325
+ pos = appendData(pos, end, "</p>");
326
+
327
+ endRequestWithSimpleResponse(&client, &req, StaticString(buf, pos - buf), 500);
328
+ } else {
329
+ endRequestWithSimpleResponse(&client, &req, "<h2>Internal server error</h2>"
330
+ "Application could not be started. Please try again later.", 500);
331
+ }
325
332
  }
326
333
 
327
334
  /**
@@ -351,7 +358,7 @@ Controller::endRequestWithErrorResponse(Client **c, Request **r, const StaticStr
351
358
  } catch (const SystemException &e2) {
352
359
  SKC_ERROR(client, "Cannot render an error page: " << e2.what() <<
353
360
  "\n" << e2.backtrace());
354
- data = "Internal Server Error";
361
+ data = "<h2>Internal server error</h2>";
355
362
  }
356
363
  }
357
364
 
@@ -119,7 +119,7 @@
119
119
 
120
120
  #define PASSENGER_DEFAULT_USER "nobody"
121
121
 
122
- #define PASSENGER_VERSION "5.0.22"
122
+ #define PASSENGER_VERSION "5.0.23"
123
123
 
124
124
  #define POOL_HELPER_THREAD_STACK_SIZE 262144
125
125
 
@@ -144,7 +144,7 @@ private:
144
144
  "Stop accepting clients for 3 seconds.");
145
145
  pollers[0].fd = exitPipe[0];
146
146
  pollers[0].events = POLLIN;
147
- if (poll(pollers, 1, 3) == 1) {
147
+ if (poll(pollers, 1, 3000) == 1) {
148
148
  quit = true;
149
149
  } else {
150
150
  P_NOTICE("Resuming accepting new clients");
@@ -99,7 +99,7 @@ function passengerToWinstonLogLevel(passengerLogLevel) {
99
99
  default:
100
100
  break;
101
101
  }
102
-
102
+
103
103
  return "none";
104
104
  }
105
105
 
@@ -107,29 +107,29 @@ function setupEnvironment(options) {
107
107
  PhusionPassenger.options = options;
108
108
  PhusionPassenger.configure = configure;
109
109
  PhusionPassenger._appInstalled = false;
110
-
110
+
111
111
  var logLevel = passengerToWinstonLogLevel(PhusionPassenger.options.log_level);
112
112
  var winston = require("vendor-copy/winston");
113
113
  var logger = new (winston.Logger)({
114
- transports: [
114
+ transports: [
115
115
  new (winston.transports.Console)({ level: logLevel, debugStdout: true })
116
116
  ]
117
117
  });
118
-
118
+
119
119
  process.title = 'Passenger NodeApp: ' + options.app_root;
120
120
  http.Server.prototype.originalListen = http.Server.prototype.listen;
121
121
  http.Server.prototype.listen = installServer;
122
-
123
- ustLog.init(logger, PhusionPassenger.options.ust_router_address, PhusionPassenger.options.ust_router_username,
122
+
123
+ ustLog.init(logger, PhusionPassenger.options.ust_router_address, PhusionPassenger.options.ust_router_username,
124
124
  PhusionPassenger.options.ust_router_password, PhusionPassenger.options.union_station_key, PhusionPassenger.options.app_group_name);
125
125
 
126
126
  if (ustLog.isEnabled()) {
127
127
  // must be first so other modules can use the cls context
128
128
  require('vendor-copy/continuation-local-storage').createNamespace('passenger-request-ctx');
129
-
129
+
130
130
  global.phusion_passenger_ustReporter = require('phusion_passenger/ustreporter');
131
131
  global.phusion_passenger_ustReporter.init(logger, options.app_root, ustLog);
132
-
132
+
133
133
  instrumentModulePaths.forEach(function(modulePath) {
134
134
  var module = require(modulePath);
135
135
  instrumentedModules.push(module);
@@ -143,7 +143,7 @@ function setupEnvironment(options) {
143
143
  process.stdin.resume();
144
144
 
145
145
  loadApplication();
146
-
146
+
147
147
  if (ustLog.isEnabled()) {
148
148
  instrumentedModules.forEach(function(module) {
149
149
  module.initPostLoad();
@@ -225,7 +225,7 @@ class RequestHandler:
225
225
  return socket.socket.makefile(sock, 'rb', 512)
226
226
 
227
227
  def process_request(self, env, input_stream, output_stream):
228
- # The WSGI speculation says that the input parameter object passed needs to
228
+ # The WSGI specification says that the input parameter object passed needs to
229
229
  # implement a few file-like methods. This is the reason why we "wrap" the socket._socket
230
230
  # into the _fileobject to solve this.
231
231
  #
@@ -33,7 +33,7 @@ var applicationThis;
33
33
  exports.initPreLoad = function() {
34
34
  log = ustReporter.getPassengerLogger();
35
35
  var appRoot = ustReporter.getApplicationRoot();
36
-
36
+
37
37
  try {
38
38
  express = require(appRoot + "/node_modules/express");
39
39
  } catch (e) {
@@ -41,7 +41,7 @@ exports.initPreLoad = function() {
41
41
  log.debug("Not instrumenting Express (probably not used): " + e);
42
42
  return;
43
43
  }
44
-
44
+
45
45
  try {
46
46
  log.info("==== Instrumentation [Express] ==== initialize");
47
47
  log.debug("hook application.init, to be the first in the use() line..");
@@ -52,9 +52,9 @@ exports.initPreLoad = function() {
52
52
  var rval = express.application.initOrig.apply(this, arguments);
53
53
 
54
54
  this.use(logRequest);
55
-
55
+
56
56
  applicationThis = this; // store for initPostLoad use
57
-
57
+
58
58
  return rval;
59
59
  };
60
60
 
@@ -65,9 +65,9 @@ exports.initPreLoad = function() {
65
65
  if (arguments[0].length == 4) {
66
66
  express.application.useOrig.call(this, logException);
67
67
  }
68
-
68
+
69
69
  express.application.useOrig.apply(this, arguments);
70
- }
70
+ }
71
71
  } catch (e) {
72
72
  log.error("Unable to instrument Express due to error: " + e);
73
73
  }
@@ -97,7 +97,7 @@ function logException(err, req, res, next) {
97
97
  // We may have multiple exception handlers in the routing chain, ensure only the first one actually logs.
98
98
  if (!res.hasLoggedException) {
99
99
  log.verbose("==== Instrumentation [Express] ==== EXCEPTION + TRACE FOR [" + req.url + "]");
100
-
100
+
101
101
  ustReporter.logException(err.name, err.message, err.stack);
102
102
 
103
103
  res.hasLoggedException = true;
@@ -79,16 +79,16 @@ function collectionFn(origArguments, databaseName, collectionName, functionName,
79
79
  var tEnd = ustReporter.nowTimestamp();
80
80
 
81
81
  log.verbose("==== Instrumentation [MongoDB] ==== [" + query + "] (attach to txnId " + ustReporter.getCurrentTxnId() + ")");
82
-
82
+
83
83
  ustReporter.logTimedActivityMongo("mongo: " + query, tBegin, tEnd, query);
84
-
84
+
85
85
  return rval;
86
86
  }
87
87
 
88
88
  exports.initPreLoad = function() {
89
89
  log = ustReporter.getPassengerLogger();
90
90
  var appRoot = ustReporter.getApplicationRoot();
91
-
91
+
92
92
  // See if the mongodb driver is used. It can also be used through mongoskin, in which case older mongoskin
93
93
  // versions will have it as part of their own node_modules.
94
94
  try {
@@ -106,10 +106,10 @@ exports.initPreLoad = function() {
106
106
 
107
107
  // The 1.4 mongo driver series uses a callback mechanism that breaks continuation-local-storage.
108
108
  wrapRepairCLSMongo14();
109
-
109
+
110
110
  // Newer mongoskin techniques break continuation-local-storage, so we need to skin the skinner there.
111
111
  wrapRepairCLSMongoskinUtils(appRoot);
112
-
112
+
113
113
  try {
114
114
  for (i = 0; i < collectionMethods.length; i++) {
115
115
  instrumentCollectionMethod(mongodb.Collection.prototype, collectionMethods[i], collectionFn);
@@ -125,7 +125,7 @@ function wrapRepairCLSMongo14() {
125
125
  log.verbose("Not using MongoDB 1.4.x, so don't need MongoDB continuation-local-storage workaround");
126
126
  return;
127
127
  }
128
-
128
+
129
129
  mongodb.Db.prototype._passenger_wrapped__executeQueryCommand = mongodb.Db.prototype._executeQueryCommand;
130
130
  mongodb.Db.prototype._executeQueryCommand = function() {
131
131
  if (arguments.length > 0 && typeof(arguments[arguments.length - 1]) === 'function') {
@@ -173,20 +173,20 @@ function wrapRepairCLSMongoskinUtils(appRoot) {
173
173
  log.verbose("Not using mongoskin continuation-local-storage workaround (either not used, old version, or new unsupported version): " + e);
174
174
  return;
175
175
  }
176
-
176
+
177
177
  try {
178
178
  // makeSkinClass is a factory, so need a double wrap: one to get the run-time factory output (skinClass),
179
179
  // and then one that hooks the actual method in that output.
180
180
  mongoskinUtils._passenger_wrapped_makeSkinClass = mongoskinUtils.makeSkinClass;
181
181
  mongoskinUtils.makeSkinClass = function(NativeClass, useNativeConstructor) {
182
182
  var skinClass = mongoskinUtils._passenger_wrapped_makeSkinClass(NativeClass, useNativeConstructor);
183
-
183
+
184
184
  skinClass.prototype._passenger_wrapped_open = skinClass.prototype.open;
185
185
  skinClass.prototype.open = function(callback) {
186
186
  // Finally we can bind the callback so that when the emitter calls it, the cls is mapped correctly.
187
187
  return skinClass.prototype._passenger_wrapped_open.call(this, ustReporter.getCLSWrappedCallback(callback));
188
188
  }
189
-
189
+
190
190
  return skinClass;
191
191
  }
192
192
  log.verbose("Using mongoskin continuation-local-storage workaround");
@@ -65,7 +65,7 @@ exports.nowTimestamp = function() {
65
65
  /**
66
66
  * All Activity logs will be dropped unless they are done after this method, from within an execution chain starting with the callback. So it is
67
67
  * essential to call this function whenever you intercept a request, before code that might want to log can be reached. The function adds context
68
- * to the execution chain such that future logs can be correctly appended to the currently open request log, also for modules that don't
68
+ * to the execution chain such that future logs can be correctly appended to the currently open request log, also for modules that don't
69
69
  * have access to the request object (such as database drivers).
70
70
  *
71
71
  * @param callback
@@ -84,7 +84,7 @@ exports.attachToRequest = function(request, response, callback) {
84
84
  reqNamespace.bindEmitter(response);
85
85
 
86
86
  // The Passenger core has an open transaction associated with the request, to which we can attach info from node instrumentation.
87
- // However, logToUstTransaction() communicates async with the ustrouter, and is not guaranteed to deliver before the application response arrives
87
+ // However, logToUstTransaction() communicates async with the ustrouter, and is not guaranteed to deliver before the application response arrives
88
88
  // back to the core (at which point the core will close the transaction and later additions will not be taken into account).
89
89
  // That's why we intercept response.end() (from the doc: the method, response.end(), MUST be called on each response), so we can defer it
90
90
  // until we are sure the ustrouter is aware of any attachments generated during the request handling.
@@ -92,7 +92,7 @@ exports.attachToRequest = function(request, response, callback) {
92
92
  response.end = function() {
93
93
  return ustLog.deferIfPendingTxns(attachToTxnId, this, response._passenger_wrapped_end, arguments);
94
94
  };
95
-
95
+
96
96
  // Make request transaction ID available for other instrumentation modules, e.g. mongo doesn't know about requests (which is how the core passes
97
97
  // txn ID).
98
98
  reqNamespace.run(function() {
@@ -145,7 +145,7 @@ function logTimedActivity(activityName, tBegin, tEnd, dataType, dataObj) {
145
145
  log.error("ustReporter: logTimedActivity is missing name or begin/end timestamp, dropping.");
146
146
  return;
147
147
  }
148
-
148
+
149
149
  var attachToTxnId = getCurrentTxnId();
150
150
  if (!attachToTxnId) {
151
151
  log.warn("Dropping Union Station timed action log due to lack of txnId to attach to " +
@@ -170,7 +170,7 @@ function logTimedActivity(activityName, tBegin, tEnd, dataType, dataObj) {
170
170
  }
171
171
 
172
172
  /**
173
- * For logging intercepted exceptions. If the exception occurred in relation to a request (i.e. within an execution chain from the attachToRequest
173
+ * For logging intercepted exceptions. If the exception occurred in relation to a request (i.e. within an execution chain from the attachToRequest
174
174
  * callback), the exception will be associated with that request, otherwise it's sent as a standalone.
175
175
  *
176
176
  * @param name
@@ -184,12 +184,12 @@ exports.logException = function(name, message, trace) {
184
184
  try {
185
185
  log.debug("ustReporter: logException(name: " + name + ", message: " + message + ")");
186
186
  var logBuf = [];
187
-
187
+
188
188
  var requestTxnId = getCurrentTxnId();
189
189
  if (requestTxnId) {
190
190
  logBuf.push("Request transaction ID: " + requestTxnId);
191
191
  }
192
-
192
+
193
193
  logBuf.push("Message: " + new Buffer(message).toString('base64'));
194
194
  logBuf.push("Class: " + name);
195
195
  logBuf.push("Backtrace: " + new Buffer(trace).toString('base64'));
@@ -31,7 +31,7 @@ module PhusionPassenger
31
31
 
32
32
  PACKAGE_NAME = 'passenger'
33
33
  # Run 'rake src/cxx_supportlib/Constants.h' after changing this number.
34
- VERSION_STRING = '5.0.22'
34
+ VERSION_STRING = '5.0.23'
35
35
 
36
36
  PREFERRED_NGINX_VERSION = '1.8.0'
37
37
  NGINX_SHA256_CHECKSUM = '23cca1239990c818d8f6da118320c4979aadf5386deda691b1b7c2c96b9df3d5'
@@ -44,16 +44,17 @@ module PhusionPassenger
44
44
 
45
45
  def start
46
46
  if ENV['PASSENGER_USE_RUBY_NATIVE_SUPPORT'] == '0'
47
- STDERR.puts " --> Continuing without #{library_name}."
48
- STDERR.puts " Because PASSENGER_USE_RUBY_NATIVE_SUPPORT is set to 0."
47
+ STDERR.puts " [#{library_name}] will not be used (PASSENGER_USE_RUBY_NATIVE_SUPPORT=0)"
48
+ STDERR.puts " --> Passenger will still operate normally."
49
49
  return false
50
50
  elsif try_load
51
51
  return true
52
52
  elsif compile_and_load || download_binary_and_load
53
- STDERR.puts " --> #{library_name} successfully loaded."
53
+ STDERR.puts " [#{library_name}] successfully loaded."
54
54
  return true
55
55
  else
56
- STDERR.puts " --> Continuing without #{library_name}."
56
+ STDERR.puts " [#{library_name}] will not be used (can't compile or download) "
57
+ STDERR.puts " --> Passenger will still operate normally."
57
58
  return false
58
59
  end
59
60
  end
@@ -124,14 +125,15 @@ module PhusionPassenger
124
125
 
125
126
  def download_binary_and_load
126
127
  if !PhusionPassenger.installed_from_release_package?
128
+ STDERR.puts " [#{library_name}] not downloading because passenger wasn't installed from a release package"
127
129
  return
128
130
  end
129
131
  if ENV['PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY'] == '0'
130
- STDERR.puts " --> Skipping downloading of precompiled #{library_name}"
132
+ STDERR.puts " [#{library_name}] not downloading because PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY=0"
131
133
  return
132
134
  end
133
135
 
134
- STDERR.puts " --> Downloading precompiled #{library_name} for the current Ruby interpreter..."
136
+ STDERR.puts " [#{library_name}] finding downloads for the current Ruby interpreter..."
135
137
  STDERR.puts " (set PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY=0 to disable)"
136
138
 
137
139
  require 'logger'
@@ -184,13 +186,13 @@ module PhusionPassenger
184
186
 
185
187
  def compile_and_load
186
188
  if ENV['PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY'] == '0'
187
- STDERR.puts " --> Skipping compiling of #{library_name}"
189
+ STDERR.puts " [#{library_name}] not compiling because PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0"
188
190
  return false
189
191
  end
190
192
 
191
193
  if PhusionPassenger.custom_packaged? && !File.exist?(PhusionPassenger.ruby_extension_source_dir)
192
194
  PhusionPassenger.require_passenger_lib 'constants'
193
- STDERR.puts " --> No #{library_name} found for current Ruby interpreter."
195
+ STDERR.puts " [#{library_name}] not found for current Ruby interpreter."
194
196
  case PhusionPassenger.packaging_method
195
197
  when 'deb'
196
198
  STDERR.puts " This library provides various optimized routines that make"
@@ -207,7 +209,7 @@ module PhusionPassenger
207
209
  return false
208
210
  end
209
211
 
210
- STDERR.puts " --> Compiling #{library_name} for the current Ruby interpreter..."
212
+ STDERR.puts " [#{library_name}] trying to compile for the current Ruby interpreter..."
211
213
  STDERR.puts " (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable)"
212
214
 
213
215
  require 'fileutils'
@@ -105,7 +105,7 @@ module PhusionPassenger
105
105
  log("Command could not be executed! #{exec_error_reason}".strip)
106
106
  return false
107
107
  elsif result
108
- log("Check suceeded")
108
+ log("Check succeeded")
109
109
  if capture_output
110
110
  return { :result => true, :output => output }
111
111
  else
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passenger
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.22
4
+ version: 5.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phusion - http://www.phusion.nl/
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-07 00:00:00.000000000 Z
11
+ date: 2015-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.8.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.8.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: A modern web server and application server for Ruby, Python and Node.js,
@@ -52,7 +52,7 @@ extensions:
52
52
  - src/helper-scripts/download_binaries/extconf.rb
53
53
  extra_rdoc_files: []
54
54
  files:
55
- - .editorconfig
55
+ - ".editorconfig"
56
56
  - CHANGELOG
57
57
  - CONTRIBUTING.md
58
58
  - CONTRIBUTORS
@@ -3115,20 +3115,19 @@ require_paths:
3115
3115
  - src/ruby_supportlib
3116
3116
  required_ruby_version: !ruby/object:Gem::Requirement
3117
3117
  requirements:
3118
- - - ! '>='
3118
+ - - ">="
3119
3119
  - !ruby/object:Gem::Version
3120
3120
  version: '0'
3121
3121
  required_rubygems_version: !ruby/object:Gem::Requirement
3122
3122
  requirements:
3123
- - - ! '>='
3123
+ - - ">="
3124
3124
  - !ruby/object:Gem::Version
3125
3125
  version: '0'
3126
3126
  requirements: []
3127
3127
  rubyforge_project: passenger
3128
- rubygems_version: 2.2.2
3128
+ rubygems_version: 2.4.5.1
3129
3129
  signing_key:
3130
3130
  specification_version: 4
3131
3131
  summary: A fast and robust web server and application server for Ruby, Python and
3132
3132
  Node.js
3133
3133
  test_files: []
3134
- has_rdoc:
@@ -1,12 +0,0 @@
1
- -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
- Comment: GPGTools - http://gpgtools.org
4
-
5
- iQEcBAABAgAGBQJWZcnSAAoJECrHRaUKISqMpCEH/R8YL/vchV8DBTf2Xp9iLZoe
6
- eqWSai9elAMOhDIjQr06/6hkkV3F3u/LawQ/5WHkDJGMPxsYGxKdY4mg4U+xZO5K
7
- E7Uyjl1DONNt4b7mlcC2aTnYXAvgT+Qeo19nnNZACkeSv4hqVwS9VISovxOehF69
8
- zwqhgPZBkkkAPsVovkPcGuI3s/NPjwdLZWOmHGvmxmcJFohZp+KapDAbXuOTGkDZ
9
- E6zE1C120aXmwpjDW1MnXiPfJkvv3m6A5ZN0logO64UnC3D3J93Cpx0XGSIgIWX3
10
- zH1gIjYO6gBElZkUTR3ZclGXNEosBtN/Ytsq9ZEn3oBY/4qpVihqab1BlYC2mAo=
11
- =5qdK
12
- -----END PGP SIGNATURE-----
data.tar.gz.asc DELETED
@@ -1,12 +0,0 @@
1
- -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
- Comment: GPGTools - http://gpgtools.org
4
-
5
- iQEcBAABAgAGBQJWZcnSAAoJECrHRaUKISqMIvYH/3+gtJxD8UeVQAFkVLTl+sPU
6
- Yo+q/ork9+HlVkZOGVgFEYBhqXr9DV/HG2HbksidRAVpWxqPac0bU5wduyuQnCp3
7
- NHG3276nUHEGjJ0DegAPu7Kb2LGFBI2d018ERhgRegxOp7n3zbNga06bcR0XRpxI
8
- LGgmi9pmyW9FbL4N6wv4GPRsv2iMlIyisylzWIdX6jKwPBm2HuwRaSRxZMxN3wau
9
- 7F0iGhDotpSq6qmkioXaJUhOkZD+VK1sDaLck1qolj0o5IMJ5/1TEDTmDnWRi0lJ
10
- od1b+r9VtAnxSRaL7VDsgL32NvU6IxIulJZPthLfy2lSo/ZD7/bvwWPod33PdKA=
11
- =c3l3
12
- -----END PGP SIGNATURE-----
metadata.gz.asc DELETED
@@ -1,12 +0,0 @@
1
- -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
- Comment: GPGTools - http://gpgtools.org
4
-
5
- iQEcBAABAgAGBQJWZcnSAAoJECrHRaUKISqM4U0H/AmwSUzb6U577R1Ek4iR+d+Q
6
- KbG8ejH4y2kuMfNsn9EVwq3OTkzNiTKBM47Vo8covtplEmg1HFmGMUwhpJyUanZD
7
- 5uquGtl+2kDfvGp3TQRsmqk8nSYDUJq7k6IC8q2fmCCen7VRa6gNnZ7QYdhhePXp
8
- 84mJsk4zqrHSafOHX0kHYd1dZQlufG+pM3ufX330M9a1FDUhH4VzVWcNmlIqiV/w
9
- Z3Lr+Vni74pDYIOKX+xJkXtbLz2Tza4fEyVndeORPdJrpoRNtThGwp7CSvfZgXTw
10
- 5IeODjXtZIsxNCDjb4c+mFhpUKI9m357A8bCwlgSuBFEXf8XmTYQkGIaFskwZqE=
11
- =CWuL
12
- -----END PGP SIGNATURE-----