2010-03-22 2 views
0

.ini 파일에 debug = false을 설정하면 Pylons 0.9.7 컨트롤러의 request 개체에 액세스 할 수 없습니다.Pylons 오류 "이 개체에 대한 스레드 (이름 : 요청)가 debug = false로 등록되었습니다."

!!! request = <Request at 0x9571190 POST http://my_url> 
!!! request.params = UnicodeMultiDict([... lots of stuff ...]) 

나는 다음과 같은 얻을 debug = false을 설정 한 경우 :

!!! request = <paste.registry.StackedObjectProxy object at 0x4093790> 
Error - <type 'exceptions.TypeError'>: No object (name: request) has been registered for this thread 

스택 추적 확인한다 디버깅

def run_something(self): 
    print('!!! request = %r' % request) 
    print('!!! request.params = %r' % request.params) 
    yield 'Stuff' 

이 잘 작동하고 출력합니다 활성화 : 나는 다음과 같은 코드가 있습니다 오류는 print('!!! request.params = %r' % request.params) 행에 있습니다.

붙여 넣기 서버를 사용하여 실행 중이며이 두 줄은 내 컨트롤러 메서드의 맨 처음 줄입니다.

이것은 문에 도달하지 않은 경우에도 yield 문이있는 경우에만 발생합니다. 나는 Pylons가 그것이 생성기 방법이라고보고 다른 스레드에서 실행합니다. 내 질문 :

  1. debug = false과 어떻게 작동합니까?
  2. debug = true과 함께 작동하는 이유는 무엇입니까? 분명히 이것은 매우 위험한 버그입니다. 왜냐하면 평소에 debug = true으로 개발 했으므로 개발 중에는 눈에 띄지 않을 수 있습니다.
+0

아마도 debug = false는 middleware.py에서 RegistryManager를 제외하고 있습니까? –

답변

2

직접 조치를해서는 안됩니다. 응답 할 때까지 레지스트리를 유지

app = RegistryManager(app, streaming=True) 

(aoo_globals 등) 살아 : 당신이 당신의 미들웨어를 설정할 때

def run_something(self): 
    request = pylons.request._current_obj() 
    def func(): 
     print('!!! request = %r' % request) 
     print('!!! request.params = %r' % request.params) 
     yield 'Stuff' 
    return func() 
+0

좋습니다. 나는 self.request = request._current_obj()를 할당함으로써 약간 수정했다. 하지만 왜 이런 일을해야하고 왜 debug = false 만 사용해야합니까? – EMP

+0

'request'는 StackedObjectProxy 유형의 모듈 수준 변수이기 때문입니다. 모든 스레드간에 공유되며 현재 실행중인 스레드에 바인딩 된 실제 개체에 대한 작업을 수행합니다. _current_obj()를 수동으로 가져 오는 이유는 아마도 Pylons 디자인 일 것입니다. 작업이 완료되면 현재 스레드의 요청을 '언 바운드'한다고 생각합니다. pylons가 'func'함수의 결과를 내면 작업이 이미 완료된 것입니다. debug = false 설정에 대해서는 잘 모르겠지만 요청 동작을 변경하는 미들웨어 때문인 것 같습니다. – Yaroslav

+0

다른 경우에는 출력이 버퍼링되고 '스트리밍'효과가 없으므로 debug = false를 설정해야합니다. – Yaroslav

0

이 RegistryManager에 지원을 스트리밍 가능 : 내부 기능을하고 FUNC()을 돌아보십시오 반복을 완료했습니다.

관련 문제