http://www.mail-archive.com/modwsgi@googlegroups.com/msg07417.html


mod_wsgi.c: In function 'wsgi_process_socket':

mod_wsgi.c:10095: error: 'conn_rec' has no member named 'remote_addr'

mod_wsgi.c:10103: error: 'conn_rec' has no member named 'remote_ip'

mod_wsgi.c:10103: error: 'conn_rec' has no member named 'remote_addr'

mod_wsgi.c: In function 'wsgi_hook_daemon_handler':

mod_wsgi.c:12742: error: 'conn_rec' has no member named 'remote_ip'

mod_wsgi.c: In function 'Auth_environ':

mod_wsgi.c:13262: error: 'conn_rec' has no member named 'remote_ip'

mod_wsgi.c:13263: error: 'conn_rec' has no member named 'remote_ip'

mod_wsgi.c:13295: error: 'conn_rec' has no member named 'remote_addr'

mod_wsgi.c: In function 'wsgi_hook_access_checker':

mod_wsgi.c:14395: error: 'conn_rec' has no member named 'remote_ip'

mod_wsgi.c: At top level:

mod_wsgi.c:14697: warning: initialization from incompatible pointer type

apxs:Error: Command failed with rc=65536



mod_wsgi 3.3 설치시 이런 오류가 뜨는데 이는 Apache API가 바뀔 때 함수 이름도 같이 바뀌어서 나는 오류다. 


해결 방법은 간단하게

remote_ip를 client_ip로,

vim에서: %s/remote_ip/client_ip/g


remote_addr를 client_addr로

vim에서: %s/remote_addr/client_addr/g


로 바꿔주면 된다. 


mod_wsgi 4에는 해결 됐다고 하니 stable release 되면 상관 없을 듯. 



댓글을 달아 주세요

--- mod_python-3.3.1/src/connobject.c    2006-12-03 13:36:37.000000000 +0900
+++ mod_python-3.3.1_patched/src/connobject.c    2011-11-20 14:33:20.000000000 +0900
@@ -139,7 +139,7 @@
     bytes_read = 0;
 
     while ((bytes_read < len || len == 0) &&
-           !(b == APR_BRIGADE_SENTINEL(b) ||
+           !(b == APR_BRIGADE_SENTINEL(bb) ||
              APR_BUCKET_IS_EOS(b) || APR_BUCKET_IS_FLUSH(b))) {
 
         const char *data;

댓글을 달아 주세요

os 모듈의 system, popen* 함수를 지워야 할 일이 있어서 Python 소스의 거의 절반을 뜯어본 결과.. 답은 은근히 쉬웠다.

os 모듈의 파이썬 소스(Lib/os.py)에 들어있지 않은 함수들은 Modules/posixmodule.c 에 들어있는데, 거기서 지우고 싶은 함수를 찾아서 함수등록하는 변수에서 해당하는 함수의 줄을 주석처리 해주면 된다.

(파이썬은 C 언어 기반이기 때문에, 부득이하게 system 함수나 popen 함수, socket 라이브러리등은 파이썬으로 작성할 수 없기 때문에 C 언어를 쓴다. 그래서 꽤나 고생했다)

파이썬 C 모듈에서 함수를 등록하는 변수는
static PyMethodDef (name)_methods[] = {
형식인데,

os 모듈에서는
static PyMethodDef posix_methods[] = {
이다.

예를들어 system 함수를 지우고 싶으면
    {"system",    posix_system, METH_VARARGS, posix_system__doc__}
를 주석처리,

nice 함수를 지우고 싶으면
{"nice",        posix_nice, METH_VARARGS, posix_nice__doc__},
를 주석처리 해주면 된다.

그리고 재컴파일하고 make install 해주면 끝.

이렇게 하기 귀찮으면, Lib/os.py 맨 밑에 del system, popen 해도 되긴하지만, 꼼수가 많기 떄문에 불안하기 때문에 C 소스에서 바로 날려버리는게 속 편하다.

댓글을 달아 주세요