passenger 4.0.23 → 4.0.24
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.
- data.tar.gz.asc +7 -7
- data/NEWS +17 -0
- data/bin/passenger-config +3 -0
- data/bin/passenger-install-apache2-module +1 -1
- data/bin/passenger-install-nginx-module +1 -1
- data/build/integration_tests.rb +5 -3
- data/debian.template/control.template +6 -4
- data/doc/Users guide Apache.idmap.txt +9 -5
- data/doc/Users guide Apache.txt +38 -3
- data/doc/Users guide Nginx.idmap.txt +58 -54
- data/doc/Users guide Nginx.txt +126 -63
- data/doc/Users guide Standalone.idmap.txt +19 -15
- data/doc/Users guide Standalone.txt +92 -0
- data/doc/users_guide_snippets/environment_variables.txt +11 -0
- data/doc/users_guide_snippets/installation.txt +8 -8
- data/doc/users_guide_snippets/troubleshooting/default.txt +12 -4
- data/ext/apache2/Configuration.cpp +0 -10
- data/ext/apache2/Configuration.hpp +0 -3
- data/ext/apache2/ConfigurationCommands.cpp +18 -0
- data/ext/apache2/ConfigurationFields.hpp +12 -6
- data/ext/apache2/ConfigurationFields.hpp.erb +10 -5
- data/ext/apache2/ConfigurationSetters.cpp +27 -0
- data/ext/apache2/CreateDirConfig.cpp +3 -0
- data/ext/apache2/Hooks.cpp +15 -74
- data/ext/apache2/MergeDirConfig.cpp +21 -0
- data/ext/apache2/SetHeaders.cpp +8 -0
- data/ext/common/ApplicationPool2/Group.h +1 -1
- data/ext/common/ApplicationPool2/Implementation.cpp +22 -5
- data/ext/common/ApplicationPool2/Options.h +10 -1
- data/ext/common/ApplicationPool2/Pool.h +4 -0
- data/ext/common/Constants.h +4 -2
- data/ext/common/agents/HelperAgent/RequestHandler.h +1 -0
- data/ext/nginx/CacheLocationConfig.c +20 -0
- data/ext/nginx/ConfigurationCommands.c +10 -0
- data/ext/nginx/ConfigurationFields.h +2 -0
- data/ext/nginx/CreateLocationConfig.c +5 -0
- data/ext/nginx/MergeLocationConfig.c +6 -0
- data/ext/nginx/config +14 -14
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/apache2/config_options.rb +23 -0
- data/lib/phusion_passenger/constants.rb +3 -1
- data/lib/phusion_passenger/nginx/config_options.rb +4 -0
- data/lib/phusion_passenger/platform_info/operating_system.rb +2 -0
- data/lib/phusion_passenger/platform_info/ruby.rb +24 -0
- data/lib/phusion_passenger/standalone/app_finder.rb +65 -25
- data/lib/phusion_passenger/standalone/command.rb +1 -1
- data/lib/phusion_passenger/standalone/start_command.rb +6 -5
- data/resources/templates/installer_common/run_installer_as_root.txt.erb +4 -1
- data/resources/templates/standalone/config.erb +1 -1
- data/test/cxx/ApplicationPool2/PoolTest.cpp +18 -0
- metadata +13 -5
- metadata.gz.asc +7 -7
- checksums.yaml +0 -15
- checksums.yaml.gz.asc +0 -12
data/ext/apache2/Hooks.cpp
CHANGED
@@ -680,83 +680,25 @@ private:
|
|
680
680
|
}
|
681
681
|
apr_table_setn(r->headers_out, "Status", r->status_line);
|
682
682
|
|
683
|
-
//bool xsendfile = hasModXsendfile() &&
|
684
|
-
// apr_table_get(r->err_headers_out, "X-Sendfile");
|
685
|
-
|
686
683
|
UPDATE_TRACE_POINT();
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
// mod_xsendfile drops the entire output bucket so
|
701
|
-
// suppress this message when mod_xsendfile is active.
|
702
|
-
P_WARN("Apache stopped forwarding the backend's response, "
|
703
|
-
"even though the HTTP client did not close the "
|
704
|
-
"connection. Is this an Apache bug?");
|
684
|
+
if (config->errorOverride == DirConfig::ENABLED
|
685
|
+
&& ap_is_HTTP_ERROR(r->status))
|
686
|
+
{
|
687
|
+
/* Send ErrorDocument.
|
688
|
+
* Clear r->status for override error, otherwise ErrorDocument
|
689
|
+
* thinks that this is a recursive error, and doesn't find the
|
690
|
+
* custom error page.
|
691
|
+
*/
|
692
|
+
int originalStatus = r->status;
|
693
|
+
r->status = HTTP_OK;
|
694
|
+
return originalStatus;
|
695
|
+
} if (ap_pass_brigade(r->output_filters, bb) == APR_SUCCESS) {
|
696
|
+
apr_brigade_cleanup(bb);
|
705
697
|
}
|
706
|
-
*/
|
707
|
-
|
708
698
|
return OK;
|
709
|
-
} else if (backendData[0] == '\0') {
|
710
|
-
/* if ((long long) timer.elapsed() >= r->server->timeout / 1000) {
|
711
|
-
// Looks like an I/O timeout.
|
712
|
-
P_ERROR("No data received from " <<
|
713
|
-
"the backend application (process " <<
|
714
|
-
backendPid << ") within " <<
|
715
|
-
(r->server->timeout / 1000) << " msec. Either " <<
|
716
|
-
"the backend application is frozen, or " <<
|
717
|
-
"your TimeOut value of " <<
|
718
|
-
(r->server->timeout / 1000000) <<
|
719
|
-
" seconds is too low. Please check " <<
|
720
|
-
"whether your application is frozen, or " <<
|
721
|
-
"increase the value of the TimeOut " <<
|
722
|
-
"configuration directive.");
|
723
|
-
} else {
|
724
|
-
P_ERROR("The backend application (process " <<
|
725
|
-
backendPid << ") did not send a valid " <<
|
726
|
-
"HTTP response; instead, it sent nothing " <<
|
727
|
-
"at all. It is possible that it has crashed; " <<
|
728
|
-
"please check whether there are crashing " <<
|
729
|
-
"bugs in this application.");
|
730
|
-
} */
|
731
|
-
apr_table_setn(r->err_headers_out, "Status", "500 Internal Server Error");
|
732
|
-
return HTTP_INTERNAL_SERVER_ERROR;
|
733
699
|
} else {
|
734
|
-
|
735
|
-
|
736
|
-
P_ERROR("The backend application (process " <<
|
737
|
-
backendPid << ") hasn't sent a valid " <<
|
738
|
-
"HTTP response within " <<
|
739
|
-
(r->server->timeout / 1000) << " msec. Either " <<
|
740
|
-
"the backend application froze while " <<
|
741
|
-
"sending a response, or " <<
|
742
|
-
"your TimeOut value of " <<
|
743
|
-
(r->server->timeout / 1000000) <<
|
744
|
-
" seconds is too low. Please check " <<
|
745
|
-
"whether the application is frozen, or " <<
|
746
|
-
"increase the value of the TimeOut " <<
|
747
|
-
"configuration directive. The application " <<
|
748
|
-
"has sent this data so far: [" <<
|
749
|
-
backendData << "]");
|
750
|
-
} else {
|
751
|
-
P_ERROR("The backend application (process " <<
|
752
|
-
backendPid << ") didn't send a valid " <<
|
753
|
-
"HTTP response. It might have crashed " <<
|
754
|
-
"during the middle of sending an HTTP " <<
|
755
|
-
"response, so please check whether there " <<
|
756
|
-
"are crashing problems in your application. " <<
|
757
|
-
"This is the data that it sent: [" <<
|
758
|
-
backendData << "]");
|
759
|
-
} */
|
700
|
+
// HelperAgent sent an empty response, or an invalid response.
|
701
|
+
apr_brigade_cleanup(bb);
|
760
702
|
apr_table_setn(r->err_headers_out, "Status", "500 Internal Server Error");
|
761
703
|
return HTTP_INTERNAL_SERVER_ERROR;
|
762
704
|
}
|
@@ -1005,7 +947,6 @@ private:
|
|
1005
947
|
addHeader(output, "PASSENGER_APP_ROOT", mapper.getAppRoot());
|
1006
948
|
addHeader(output, "PASSENGER_APP_GROUP_NAME", config->getAppGroupName(mapper.getAppRoot()));
|
1007
949
|
#include "SetHeaders.cpp"
|
1008
|
-
addHeader(output, "PASSENGER_PYTHON", config->python);
|
1009
950
|
addHeader(output, "PASSENGER_ENV", config->getEnvironment());
|
1010
951
|
addHeader(output, "PASSENGER_SPAWN_METHOD", config->getSpawnMethodString());
|
1011
952
|
addHeader(r, output, "PASSENGER_MAX_REQUEST_QUEUE_SIZE", config->maxRequestQueueSize);
|
@@ -47,6 +47,20 @@
|
|
47
47
|
|
48
48
|
|
49
49
|
|
50
|
+
config->python =
|
51
|
+
(add->python == NULL) ?
|
52
|
+
base->python :
|
53
|
+
add->python;
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
config->nodejs =
|
58
|
+
(add->nodejs == NULL) ?
|
59
|
+
base->nodejs :
|
60
|
+
add->nodejs;
|
61
|
+
|
62
|
+
|
63
|
+
|
50
64
|
config->minInstances =
|
51
65
|
(add->minInstances == UNSET_INT_VALUE) ?
|
52
66
|
base->minInstances :
|
@@ -68,6 +82,13 @@
|
|
68
82
|
|
69
83
|
|
70
84
|
|
85
|
+
config->errorOverride =
|
86
|
+
(add->errorOverride == DirConfig::UNSET) ?
|
87
|
+
base->errorOverride :
|
88
|
+
add->errorOverride;
|
89
|
+
|
90
|
+
|
91
|
+
|
71
92
|
config->maxRequests =
|
72
93
|
(add->maxRequests == UNSET_INT_VALUE) ?
|
73
94
|
base->maxRequests :
|
data/ext/apache2/SetHeaders.cpp
CHANGED
@@ -186,7 +186,7 @@ private:
|
|
186
186
|
void spawnThreadRealMain(const SpawnerPtr &spawner, const Options &options,
|
187
187
|
unsigned int restartsInitiated);
|
188
188
|
void finalizeRestart(GroupPtr self, Options options, SpawnerFactoryPtr spawnerFactory,
|
189
|
-
vector<Callback> postLockActions);
|
189
|
+
unsigned int restartsInitiated, vector<Callback> postLockActions);
|
190
190
|
void startCheckingDetachedProcesses(bool immediately);
|
191
191
|
void detachedProcessesCheckerMain(GroupPtr self);
|
192
192
|
void wakeUpGarbageCollector();
|
@@ -907,17 +907,19 @@ Group::restart(const Options &options) {
|
|
907
907
|
vector<Callback> actions;
|
908
908
|
|
909
909
|
assert(isAlive());
|
910
|
-
assert(!m_restarting);
|
911
910
|
P_DEBUG("Restarting group " << name);
|
912
|
-
|
911
|
+
|
912
|
+
// If there is currently a restarter thread or a spawner thread active,
|
913
|
+
// the following tells them to abort their current work as soon as possible.
|
913
914
|
restartsInitiated++;
|
915
|
+
|
914
916
|
m_spawning = false;
|
915
917
|
m_restarting = true;
|
916
918
|
detachAll(actions);
|
917
919
|
getPool()->interruptableThreads.create_thread(
|
918
920
|
boost::bind(&Group::finalizeRestart, this, shared_from_this(),
|
919
921
|
options.copyAndPersist().clearPerRequestFields(),
|
920
|
-
getPool()->spawnerFactory, actions),
|
922
|
+
getPool()->spawnerFactory, restartsInitiated, actions),
|
921
923
|
"Group restarter: " + name,
|
922
924
|
POOL_HELPER_THREAD_STACK_SIZE
|
923
925
|
);
|
@@ -926,7 +928,7 @@ Group::restart(const Options &options) {
|
|
926
928
|
// The 'self' parameter is for keeping the current Group object alive while this thread is running.
|
927
929
|
void
|
928
930
|
Group::finalizeRestart(GroupPtr self, Options options, SpawnerFactoryPtr spawnerFactory,
|
929
|
-
vector<Callback> postLockActions)
|
931
|
+
unsigned int restartsInitiated, vector<Callback> postLockActions)
|
930
932
|
{
|
931
933
|
TRACE_POINT();
|
932
934
|
|
@@ -957,6 +959,15 @@ Group::finalizeRestart(GroupPtr self, Options options, SpawnerFactoryPtr spawner
|
|
957
959
|
P_DEBUG("Group " << name << " is shutting down, so aborting restart");
|
958
960
|
return;
|
959
961
|
}
|
962
|
+
if (restartsInitiated != this->restartsInitiated) {
|
963
|
+
// Before this restart could be finalized, another restart command was given.
|
964
|
+
// The spawner we just created might be out of date now so we abort.
|
965
|
+
P_DEBUG("Restart of group " << name << " aborted because a new restart was initiated concurrently");
|
966
|
+
if (debug != NULL && debug->restarting) {
|
967
|
+
debug->debugger->send("Restarting aborted");
|
968
|
+
}
|
969
|
+
return;
|
970
|
+
}
|
960
971
|
|
961
972
|
// Run some sanity checks.
|
962
973
|
pool->fullVerifyInvariants();
|
@@ -1006,8 +1017,14 @@ void
|
|
1006
1017
|
Group::detachedProcessesCheckerMain(GroupPtr self) {
|
1007
1018
|
TRACE_POINT();
|
1008
1019
|
PoolPtr pool = getPool();
|
1009
|
-
boost::unique_lock<boost::mutex> lock(pool->syncher);
|
1010
1020
|
|
1021
|
+
Pool::DebugSupportPtr debug = pool->debugSupport;
|
1022
|
+
if (debug != NULL && debug->detachedProcessesChecker) {
|
1023
|
+
debug->debugger->send("About to start detached processes checker");
|
1024
|
+
debug->messages->recv("Proceed with starting detached processes checker");
|
1025
|
+
}
|
1026
|
+
|
1027
|
+
boost::unique_lock<boost::mutex> lock(pool->syncher);
|
1011
1028
|
while (true) {
|
1012
1029
|
assert(detachedProcessesCheckerActive);
|
1013
1030
|
|
@@ -101,6 +101,7 @@ private:
|
|
101
101
|
|
102
102
|
result.push_back(&ruby);
|
103
103
|
result.push_back(&python);
|
104
|
+
result.push_back(&nodejs);
|
104
105
|
result.push_back(&loggingAgentAddress);
|
105
106
|
result.push_back(&loggingAgentUsername);
|
106
107
|
result.push_back(&loggingAgentPassword);
|
@@ -245,6 +246,12 @@ public:
|
|
245
246
|
* is a Python app.
|
246
247
|
*/
|
247
248
|
StaticString python;
|
249
|
+
|
250
|
+
/**
|
251
|
+
* Path to the Node.js command to use, in case the application to spawn
|
252
|
+
* is a Node.js app.
|
253
|
+
*/
|
254
|
+
StaticString nodejs;
|
248
255
|
|
249
256
|
/**
|
250
257
|
* Any rights that the spawned application process may have. The SpawnManager
|
@@ -386,6 +393,7 @@ public:
|
|
386
393
|
defaultUser = "nobody";
|
387
394
|
ruby = DEFAULT_RUBY;
|
388
395
|
python = DEFAULT_PYTHON;
|
396
|
+
nodejs = DEFAULT_NODEJS;
|
389
397
|
rights = DEFAULT_BACKEND_ACCOUNT_RIGHTS;
|
390
398
|
debugger = false;
|
391
399
|
loadShellEnvvars = true;
|
@@ -532,6 +540,7 @@ public:
|
|
532
540
|
appendKeyValue (vec, "postexec_chroot", postexecChroot);
|
533
541
|
appendKeyValue (vec, "ruby", ruby);
|
534
542
|
appendKeyValue (vec, "python", python);
|
543
|
+
appendKeyValue (vec, "nodejs", nodejs);
|
535
544
|
appendKeyValue (vec, "logging_agent_address", loggingAgentAddress);
|
536
545
|
appendKeyValue (vec, "logging_agent_username", loggingAgentUsername);
|
537
546
|
appendKeyValue (vec, "logging_agent_password", loggingAgentPassword);
|
@@ -585,7 +594,7 @@ public:
|
|
585
594
|
} else if (appType == "wsgi") {
|
586
595
|
return python + "\t" + resourceLocator.getHelperScriptsDir() + "/wsgi-loader.py";
|
587
596
|
} else if (appType == "node") {
|
588
|
-
return "
|
597
|
+
return nodejs + "\t" + resourceLocator.getHelperScriptsDir() + "/node-loader.js";
|
589
598
|
} else if (appType == "meteor") {
|
590
599
|
return ruby + "\t" + resourceLocator.getHelperScriptsDir() + "/meteor-loader.rb";
|
591
600
|
} else {
|
@@ -92,7 +92,9 @@ public:
|
|
92
92
|
typedef UnionStation::LoggerPtr LoggerPtr;
|
93
93
|
|
94
94
|
struct DebugSupport {
|
95
|
+
/** Mailbox for the unit tests to receive messages on. */
|
95
96
|
MessageBoxPtr debugger;
|
97
|
+
/** Mailbox for the ApplicationPool code to receive messages on. */
|
96
98
|
MessageBoxPtr messages;
|
97
99
|
|
98
100
|
// Choose aspects to debug.
|
@@ -101,6 +103,7 @@ public:
|
|
101
103
|
bool superGroup;
|
102
104
|
bool oobw;
|
103
105
|
bool testOverflowRequestQueue;
|
106
|
+
bool detachedProcessesChecker;
|
104
107
|
|
105
108
|
// The following fields may only be accessed by Pool.
|
106
109
|
boost::mutex syncher;
|
@@ -113,6 +116,7 @@ public:
|
|
113
116
|
spawning = true;
|
114
117
|
superGroup = false;
|
115
118
|
oobw = false;
|
119
|
+
detachedProcessesChecker = false;
|
116
120
|
testOverflowRequestQueue = false;
|
117
121
|
spawnLoopIteration = 0;
|
118
122
|
}
|
data/ext/common/Constants.h
CHANGED
@@ -52,6 +52,8 @@
|
|
52
52
|
|
53
53
|
#define DEFAULT_MAX_POOL_SIZE 6
|
54
54
|
|
55
|
+
#define DEFAULT_NODEJS "node"
|
56
|
+
|
55
57
|
#define DEFAULT_POOL_IDLE_TIME 300
|
56
58
|
|
57
59
|
#define DEFAULT_PYTHON "python"
|
@@ -78,7 +80,7 @@
|
|
78
80
|
|
79
81
|
#define NGINX_DOC_URL "http://www.modrails.com/documentation/Users%20guide%20Nginx.html"
|
80
82
|
|
81
|
-
#define PASSENGER_VERSION "4.0.
|
83
|
+
#define PASSENGER_VERSION "4.0.24"
|
82
84
|
|
83
85
|
#define POOL_HELPER_THREAD_STACK_SIZE 262144
|
84
86
|
|
@@ -98,7 +100,7 @@
|
|
98
100
|
|
99
101
|
#define STANDALONE_DOC_URL "http://www.modrails.com/documentation/Users%20guide%20Standalone.html"
|
100
102
|
|
101
|
-
#define STANDALONE_NGINX_CONFIGURE_OPTIONS "--with-cc-opt='-Wno-error' --without-http_fastcgi_module --without-http_scgi_module --without-http_uwsgi_module --with-http_gzip_static_module --with-http_stub_status_module"
|
103
|
+
#define STANDALONE_NGINX_CONFIGURE_OPTIONS "--with-cc-opt='-Wno-error' --without-http_fastcgi_module --without-http_scgi_module --without-http_uwsgi_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module"
|
102
104
|
|
103
105
|
#define SUPPORT_URL "http://www.phusionpassenger.com/support"
|
104
106
|
|
@@ -1718,6 +1718,7 @@ private:
|
|
1718
1718
|
fillPoolOption(client, options.environment, "PASSENGER_ENV");
|
1719
1719
|
fillPoolOption(client, options.ruby, "PASSENGER_RUBY");
|
1720
1720
|
fillPoolOption(client, options.python, "PASSENGER_PYTHON");
|
1721
|
+
fillPoolOption(client, options.nodejs, "PASSENGER_NODEJS");
|
1721
1722
|
fillPoolOption(client, options.user, "PASSENGER_USER");
|
1722
1723
|
fillPoolOption(client, options.group, "PASSENGER_GROUP");
|
1723
1724
|
fillPoolOption(client, options.minProcesses, "PASSENGER_MIN_INSTANCES");
|
@@ -58,6 +58,13 @@ u_char int_buf[32], *end, *buf, *pos;
|
|
58
58
|
|
59
59
|
|
60
60
|
|
61
|
+
if (conf->nodejs.data != NULL) {
|
62
|
+
len += 17;
|
63
|
+
len += conf->nodejs.len + 1;
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
|
61
68
|
if (conf->environment.data != NULL) {
|
62
69
|
len += 14;
|
63
70
|
len += conf->environment.len + 1;
|
@@ -246,6 +253,19 @@ buf = pos = ngx_pnalloc(cf->pool, len);
|
|
246
253
|
|
247
254
|
|
248
255
|
|
256
|
+
if (conf->nodejs.data != NULL) {
|
257
|
+
pos = ngx_copy(pos,
|
258
|
+
"PASSENGER_NODEJS",
|
259
|
+
17);
|
260
|
+
pos = ngx_copy(pos,
|
261
|
+
conf->nodejs.data,
|
262
|
+
conf->nodejs.len);
|
263
|
+
*pos = '\0';
|
264
|
+
pos++;
|
265
|
+
}
|
266
|
+
|
267
|
+
|
268
|
+
|
249
269
|
if (conf->environment.data != NULL) {
|
250
270
|
pos = ngx_copy(pos,
|
251
271
|
"PASSENGER_ENV",
|
@@ -69,6 +69,16 @@
|
|
69
69
|
NULL
|
70
70
|
},
|
71
71
|
|
72
|
+
{
|
73
|
+
|
74
|
+
ngx_string("passenger_nodejs"),
|
75
|
+
NGX_HTTP_MAIN_CONF | NGX_HTTP_SRV_CONF | NGX_HTTP_LOC_CONF | NGX_HTTP_LIF_CONF | NGX_CONF_TAKE1,
|
76
|
+
ngx_conf_set_str_slot,
|
77
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
78
|
+
offsetof(passenger_loc_conf_t, nodejs),
|
79
|
+
NULL
|
80
|
+
},
|
81
|
+
|
72
82
|
{
|
73
83
|
|
74
84
|
ngx_string("passenger_app_env"),
|
data/ext/nginx/config
CHANGED
@@ -3,6 +3,8 @@ export PATH
|
|
3
3
|
|
4
4
|
if ! ruby -v >/dev/null 2>/dev/null; then
|
5
5
|
echo '*** ERROR: Cannot find the "ruby" command in $PATH. Please fix your $PATH. You can learn more about $PATH at: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_the_path_environment_variable'
|
6
|
+
echo '*** Do you think that you set $PATH correctly, and you happen to be using sudo or rvmsudo? Read this: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#env_vars_and_sudo'
|
7
|
+
exit 1
|
6
8
|
fi
|
7
9
|
|
8
10
|
if test "x$PASSENGER_LIBS" = "x" && ! passenger-config --compiled; then
|
@@ -25,6 +27,13 @@ if test "x$PASSENGER_LIBS" = "x" && ! passenger-config --compiled; then
|
|
25
27
|
echo "*** Phusion Passenger support files have been successfully compiled. ***"
|
26
28
|
fi
|
27
29
|
|
30
|
+
if test "x$PASSENGER_INCLUDEDIR" = "x"; then
|
31
|
+
PASSENGER_INCLUDEDIR=`passenger-config --includedir`
|
32
|
+
fi
|
33
|
+
if test "x$PASSENGER_LIBS" = "x"; then
|
34
|
+
PASSENGER_LIBS=`passenger-config --nginx-libs`
|
35
|
+
fi
|
36
|
+
|
28
37
|
ngx_addon_name=ngx_http_passenger_module
|
29
38
|
HTTP_MODULES="$HTTP_MODULES ngx_http_passenger_module"
|
30
39
|
NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
|
@@ -41,20 +50,11 @@ NGX_ADDON_DEPS="$NGX_ADDON_DEPS \
|
|
41
50
|
${ngx_addon_dir}/ContentHandler.h \
|
42
51
|
${ngx_addon_dir}/StaticContentHandler.h \
|
43
52
|
${ngx_addon_dir}/ngx_http_passenger_module.h \
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
else
|
50
|
-
CORE_INCS="$CORE_INCS $PASSENGER_INCLUDEDIR"
|
51
|
-
fi
|
52
|
-
if test "x$PASSENGER_LIBS" = "x"; then
|
53
|
-
CORE_LIBS="$CORE_LIBS `passenger-config --nginx-libs`"
|
54
|
-
else
|
55
|
-
CORE_LIBS="$CORE_LIBS $PASSENGER_LIBS"
|
56
|
-
fi
|
57
|
-
CORE_LIBS="$CORE_LIBS -lstdc++ -lpthread"
|
53
|
+
${PASSENGER_INCLUDEDIR}/common/Constants.h \
|
54
|
+
${PASSENGER_INCLUDEDIR}/common/AgentsStarter.h \
|
55
|
+
${PASSENGER_INCLUDEDIR}/common/ApplicationPool2/AppTypes.h"
|
56
|
+
CORE_INCS="$CORE_INCS $PASSENGER_INCLUDEDIR"
|
57
|
+
CORE_LIBS="$CORE_LIBS $PASSENGER_LIBS -lstdc++ -lpthread"
|
58
58
|
|
59
59
|
ngx_feature="Math library"
|
60
60
|
ngx_feature_name=
|