Основной алгоритм сборки не меняется, но в этот раз я взял последние стабильные версии Nginx 0.7.64 и PCRE 8.00. Для сборки mod_wsgi с новым Nginx и Python до версии 2.6 нужно приложить следующий патч:
--- mod_wsgi-8994b058d2db/src/ngx_http_wsgi_handler.c 2008-03-26 22:35:15.000000000 +0300
+++ mod_wsgi/src/ngx_http_wsgi_handler.c 2009-12-27 15:24:03.236910911 +0300
@@ -71,7 +71,7 @@
if (r->method == NGX_HTTP_GET || r->method == NGX_HTTP_HEAD) {
/* XXX not sure */
- rc = ngx_http_discard_body(r);
+ rc = ngx_http_discard_request_body(r);
if (rc != NGX_OK && rc != NGX_AGAIN) {
return rc;
--- mod_wsgi-8994b058d2db/src/ngx_http_wsgi_module.c 2008-03-26 22:35:15.000000000 +0300
+++ mod_wsgi/src/ngx_http_wsgi_module.c 2009-12-27 15:29:46.162943943 +0300
@@ -55,6 +55,9 @@
+static ngx_path_init_t ngx_http_wsgi_temp_path = {
+ ngx_string(NGX_HTTP_WSGI_TEMP_PATH), { 1, 2, 0 }
+};
static ngx_conf_enum_t ngx_http_wsgi_reload_mechanism[] = {
{ ngx_string("module"), reload_module },
@@ -156,7 +159,7 @@
ngx_conf_set_path_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_wsgi_loc_conf_t, temp_path),
- (void *) ngx_garbage_collector_temp_handler },
+ NULL },
{ ngx_string("wsgi_var"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
@@ -342,10 +345,9 @@
ngx_conf_merge_size_value(conf->write_buffer_size, prev->write_buffer_size,
(size_t) ngx_pagesize);
- ngx_conf_merge_path_value(conf->temp_path,
+ ngx_conf_merge_path_value(cf, &conf->temp_path,
prev->temp_path,
- NGX_HTTP_WSGI_TEMP_PATH, 1, 2, 0,
- ngx_garbage_collector_temp_handler, cf);
+ &ngx_http_wsgi_temp_path);
ngx_conf_merge_value(conf->use_main_interpreter,
prev->use_main_interpreter, 0);
Что бы собрать mod_wsgi с Python 2.6 нужно приложить дополнительно следующий патч:
--- mod_wsgi-8994b058d2db/src/ngx_wsgi.c 2008-03-26 22:35:15.000000000 +0300 +++ mod_wsgi/src/ngx_wsgi.c 2009-12-27 20:30:08.052753263 +0300 @@ -281,6 +281,7 @@ 0, /*tp_subclasses*/ 0, /*tp_weaklis*/ 0, /*tp_del*/ + 0, /*tp_version_tag*/ #ifdef COUNT_ALLOCS 0, /*tp_allocs*/ 0, /*tp_frees*/ @@ -445,6 +446,7 @@ 0, /*tp_subclasses*/ 0, /*tp_weaklis*/ 0, /*tp_del*/ + 0, /*tp_version_tag*/ #ifdef COUNT_ALLOCS 0, /*tp_allocs*/ 0, /*tp_frees*/ @@ -1138,6 +1140,7 @@ 0, /*tp_subclasses*/ 0, /*tp_weaklis*/ 0, /*tp_del*/ + 0, /*tp_version_tag*/ #ifdef COUNT_ALLOCS 0, /*tp_allocs*/ 0, /*tp_frees*/ @@ -1240,6 +1243,7 @@ 0, /*tp_subclasses*/ 0, /*tp_weaklis*/ 0, /*tp_del*/ + 0, /*tp_version_tag*/ #ifdef COUNT_ALLOCS 0, /*tp_allocs*/ 0, /*tp_frees*/ @@ -1397,6 +1401,7 @@ 0, /*tp_subclasses*/ 0, /*tp_weaklis*/ 0, /*tp_del*/ + 0, /*tp_version_tag*/ #ifdef COUNT_ALLOCS 0, /*tp_allocs*/ 0, /*tp_frees*/
Comments All comments
Comment by Артём Семёнов on 05:21, 2009 12 30
А mod_wsgi для nginx, который вроде бы заброшен автором, разве не блокирует?
Comment by Dmitry Vasiliev on 10:55, 2009 12 30
Видимо заброшен - потому и патчи. :-)
Если блокируешь, то блокируется конечно.
Из простых способов это преодолеть - делать все быстро :-) и/или запускать много рабочих процессов.
Из сложных способов - mod_wsgi предоставляет интерфейс похожий на poll(), так что можно писать полностью асинхронные приложения.
Add comment