Основной алгоритм сборки не меняется, но в этот раз я взял последние стабильные версии 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