NoSmokeMoinMoinBsn 에 [[SCGI]]를 적용하면서 일어나는 일. [[PyKUG:SCGI]] 를 참고문서로 적용 === 처음실행시 === cgimain.py 의 맨 마지막부분 if 문. {{{#!python if os.environ.has_key('GATEWAY_INTERFACE'): # create CGI log file, and one for catching stderr output cgi.logfile = os.path.join(config.data_dir, 'cgi_log') sys.stderr = open(os.path.join(config.data_dir, 'err_log'), 'at') else: # if called from the shell, delegate to the "cmdmain" module from MoinMoin import cmdmain run = cmdmain.run }}} 어떤이유인지 모르겠으나 GATEWAY_INTERFACE 환경변수를 못 읽고, else문으로 들어간다. 가장 간단한 해결방법은 저부분 모두 주석화 -.-; === HTTP Header 전송 === 하나의 프로세스다 보니, 헤더한번 전송하고 끝이다. 이를 예방하려, sgci서버코드의 핸들러생성부분에 강제로 헤더를 넣었더니, 아주 가끔씩 헤더가 두번 나가는 일이 생긴다. 수정요망 윗처럼 할 경우, 헤더전송이전에 보내야할 [[Cookie]]를 보내지 못함으로인해 로그인을 할 수 없다. 해결방법은 http_headers 함수중간의 sent_headers를 항상 0으로 변경. 또 한가지 user_headers 리스트에 쌓였던것은 한번 보냈으면, 꼭 비우기. === 사용자 인증부분 === 기존의 [[CGI]]는 하나의 프로세스에는 오직 한명만이 관여하므로, user.py 의 current를 전역변수로 놓아도 상관없으나, scgi서버가 데몬으로 떠 있을 경우에는 다른 사용자임에도 불구하고, 먼저로그인한 사람의 정보가 고스란이 다음로그인한 사람에게 나타난다. 해당객체를 전역변수에서 가져와선 안되고, 요청당 따로따로 만들어야함. 가장 간단한 해결방법은 cgimain.py의 run함수 정의 첫부분에 한줄 삽입 {{{#!python def run(): from MoinMoin import user, webapi, config user.current = user.User() }}} 그러나, 아직까지 문제가 남아있는듯. 5개의 scgi 프로세스가 모두 떠있는 상황에서 간혹, 이전 접속사용자로 로그인되는 경우가 있다. 변경되지 않은 전역변수를 사용하기 때문으로 파악되나, 아직 정확한 문제는 잘 모르는중. 일단, handle_connection 메쏘드 마지막부분에 {{{env['HTTP_COOKIE']}}}를 지워주는 방식 사용. 문제가 없는지는 더 두고봐야함. === 기타 === 사용자입장에서의 달라지는 점 1. InterMap에 등록한 InterWiki는 바로 동작하지 않는다. 서버프로세스를 재시작하여야 한다. 따라서, 곧바로 링크가 표시되지 않을 수 있다. ---- CategoryMoinMoin