[완료] trac에서 한글이름 페이지에 접근하면 에러가 발생합니다.
반나절을 이리저리 헤메다가 도저히 해결을 못해서 여기에 도움을 구합니다.
저희 팀에서는 이슈관리를 위해 trac을 사용합니다.
기존에 Fedora Core3에서 설치하여 잘 사용하다가 얼마전에 문제가 있어서 시스템을 새로 밀었습니다.
그런데 Fedora Core3 설치cd를 찾을 수 없어서 결국 SULinux 2.6.18을 디폴트 설치하였지요.
trac을 사용하기 위해 설치한 패키지는 다음과 같습니다.
python-2.4.6
trac-0.9.6
trac-ktdms-041222
apr-0.9.19
apr-util-0.9.19
apache-2.0.64
mod-python 3.3.1
swig-1.3.40
trac을 아파치와 연동하여 기존에 이미 생성해서 쓰고있던 trac 프로젝트를 연결해 보았습니다.
일단, 브라우저에서는 trac 프로젝트 잘 뜨고 한글도 잘 출력됩니다.
영문이름으로 된 페이지도 잘 접근이 되구요.
그런데 문제는 한글이름으로 된 페이지를 접근하면 에러가 발생하네요.
가령, [wiki:서버장애일지] 라는 페이지에 접근하면 다음의 url로 접근합니다.
http://xxx.xxx.xxx/proj/myproject/wiki/%EC%84%9C%EB%B2%84%EC%9E%A5%EC%95%A0%EC%9D%BC%EC%A7%80
그러면 브라우저에 다음과 같은 에러 메시지가 출력됩니다.
Trac detected an internal error: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
Python traceback Traceback (most recent call last): File "/usr/local/lib/python2.4/site-packages/trac/web/cgi_frontend.py", line 131, in run dispatch_request(req.path_info, req, env) File "/usr/local/lib/python2.4/site-packages/trac/web/main.py", line 143, in dispatch_request dispatcher.dispatch(req) File "/usr/local/lib/python2.4/site-packages/trac/web/main.py", line 111, in dispatch resp = chosen_handler.process_request(req) File "/usr/local/lib/python2.4/site-packages/trac/wiki/web_ui.py", line 78, in process_request page = WikiPage(self.env, pagename, version, db) File "/usr/local/lib/python2.4/site-packages/trac/wiki/model.py", line 33, in __init__ self._fetch(name, version, db) File "/usr/local/lib/python2.4/site-packages/trac/wiki/model.py", line 52, in _fetch (name,)) File "/usr/local/lib/python2.4/site-packages/trac/db.py", line 219, in execute args or []) File "/usr/local/lib/python2.4/site-packages/trac/db.py", line 211, in _rollback_on_error return function(self, *args, **kwargs) ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
프로젝트의 trac.ini에서 default_charset은 euc-kr로 셋팅되어 있습니다.
기존에 잘 접근했던 페이지들이 서버를 새로 셋업하고 접근하니 위의 에러가 나는 것을 보면 trac의 문제라기 보다는 서버설정의 문제인것으로 추정되긴 하는데..
대체 어디가 문제인지를 모르겠습니다.
trac을 사용하시는 여러분의 조언을 부탁드립니다.
trac-0.12.2 trac-ktdms-041222
trac-ktdms-041222 예전에 trac이 한글 번역되지 않았을 때, 한글을 사용하기 위해 작업되었던 것 같습니다.
2004년도입니다.
설치하신 trac-0.12.2는 자체적으로 한글이 지원됩니다.
(현재 전혀 문제없이 사용하고 있습니다.)
따라서 trac-ktdms-041222를 사용하지 않으시는게 더 좋을 것 같습니다.
네..
네.. 맞습니다.
그런데 trac-ktdms-041222를 설치한 것은 위의 문제를 해결하려고 시도한 것이었습니다..
즉, trac-ktdms-041222를 설치하기 이전에도 계속 위의 문제가 있어서 설치해본 것이었죠..-_-;;
다시 들어내고 순수 trac만 설치된 채로 접근해봤지만 여전히 같은 문제가 발생하고 있습니다.
해결했습니다..-_-;;
드디어 이 문제를 해결했습니다.
혹시 저와 같은 문제에 시달리는 분을 위해 방법을 남겨놓습니다.
시스템을 업그레이드 하거나 다시 설치하고 기존에 잘 쓰던 trac문서중 한글 문서 및 한글명 파일에 접근이 안될 때 해결방법입니다.
pysqlite-2.6.3의 소스 디렉토리에 statement.c 라는 소스파일이 있습니다.
이 소스 안에 보면 python 코드를 sqlite DB와 바인딩 하기 위해 pysqlite_statement_bind_parameter 라는 함수가 있습니다.
여기에 다음과 같은 코드
이 코드가 euc-kr로 디코딩된 파라미터를 걸러내는 코드인데 이 코드를 #if 0 로 막아 놓고 빌드하면 됩니다.
이것때문에 4일 동안 다른 일 못하고 여기에 매달렸네요..-_-;;
댓글 달기