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 +5 -13
- data/CHANGELOG +11 -0
- data/build/packaging.rb +1 -5
- data/resources/mime.types +1 -1
- data/resources/templates/standalone/config.erb +1 -1
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +7 -0
- data/src/agent/Core/Controller/CheckoutSession.cpp +28 -21
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +1 -1
- data/src/helper-scripts/node-loader.js +9 -9
- data/src/helper-scripts/wsgi-loader.py +1 -1
- data/src/nodejs_supportlib/phusion_passenger/log_express.js +7 -7
- data/src/nodejs_supportlib/phusion_passenger/log_mongodb.js +9 -9
- data/src/nodejs_supportlib/phusion_passenger/ustreporter.js +7 -7
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/native_support.rb +11 -9
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
- metadata +10 -11
- checksums.yaml.gz.asc +0 -12
- data.tar.gz.asc +0 -12
- metadata.gz.asc +0 -12
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ODQzNjNmY2RmOTk4ZTkzZWY1MWY4MmQ1NzczMjQ4NjljYThlZTQwMA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9860ce906b0de7200f82e30d96333f500e57dd64
|
4
|
+
data.tar.gz: 68ecdbe231a4e6484ec1336ab395858bcb54e19a
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
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
|
|
data/build/packaging.rb
CHANGED
@@ -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
|
-
|
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
|
data/resources/mime.types
CHANGED
@@ -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/
|
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
|
-
"<
|
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
|
-
|
309
|
-
|
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
|
-
|
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
|
361
|
+
data = "<h2>Internal server error</h2>";
|
355
362
|
}
|
356
363
|
}
|
357
364
|
|
@@ -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,
|
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
|
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.
|
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 "
|
48
|
-
STDERR.puts "
|
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 "
|
53
|
+
STDERR.puts " [#{library_name}] successfully loaded."
|
54
54
|
return true
|
55
55
|
else
|
56
|
-
STDERR.puts "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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
|
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.
|
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-
|
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.
|
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:
|
checksums.yaml.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
|
-
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-----
|