2011-04-24 9 views
3

피라미드에서 앱을 만드는 데 문제가 있습니다. 내가 덜덜 거리며 복을 피우려고 할 때 나는 얻는다.피라미드 구성 로딩 오류

File "/home/viraptor/blah/blah/__init__.py", line 23, in main 
    return config.make_wsgi_app() 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 916, in make_wsgi_app 
    self.commit() 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 491, in commit 
    self._ctx.execute_actions() 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/zope/configuration/config.py", line 626, in execute_actions 
    callable(*args, **kw) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 1291, in register 
    derived_view = deriver(view) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2681, in __call__ 
    self.mapped_view(view)))))))) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2624, in inner 
    wrapped_view = wrapped(self, view) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2693, in mapped_view 
    mapped_view = mapper(**self.kw)(view) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2860, in __call__ 
    view = self.map_nonclass(view) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2876, in map_nonclass 
    ronly = requestonly(view, self.attr) 
    File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2966, in requestonly 
    if len(args) - len(defaults) == 1: 
zope.configuration.config.ConfigurationExecutionError: <type 'exceptions.TypeError'>: object of type 'NoneType' has no len() 
    in: 
    ('/home/viraptor/blah/blah/__init__.py', 22, 'main', "config.add_route('customer', '/customer/{customer_id}', view='blah.views.customer.view', view_renderer='customer_view.mak', view_permission='view', traverse='/customer/{customer_id}')") 

무엇이 그럴 수 있냐? 나는 최근에 그 구성을 변경하지 않았으며 나머지 응용 프로그램 만 변경했습니다.

+0

실제 예외는 포함하지 않았으며 스택 추적 만 포함되었습니다. 아무도 지금 무슨 일이 일어 났는지 알지 못한다. 단지 :-) –

+0

@Martijn Pieters - 결국 Python이 예외를 인쇄한다. ConfigurationExecutionError였습니다. – viraptor

+0

아, 내 잘못이야, 내 아이폰의 모바일보기는 전체 텍스트를 보여주지 않았고 더 오래되었다는 표시가 없었습니다. 사과! –

답변

3

피라미드의 새로운 개정판에서 버그가 수정 된 것으로 의심됩니다. 귀하의 역 추적은 args 또는 defaultsNone임을 나타내지 만 이 None이 아닌 경우 코드 브랜치에 도달 할 수 없으므로 대신 defaultsNone입니다.

https://github.com/Pylons/pyramid/commit/f168197609169fb01b65adeb3eb59d069000fe2c

난 당신이 어떤 기본값이없는 방법 만 요청 매개 변수 (method(self, request)가 있다고 가정의 주위에 일을하는 것입니다 : 나는 아무도 존재하지 defaults에 대한 특정 테스트를 추가하는 피라미드에 커밋 다음을 발견 .

0

config.add_route 만 1 위치 인수를 받아들이는 아직 내 분석은 피라미드의 코드베이스에 순수를 기반으로하므로, 피라미드와 함께 작업 할 기회가 없었어요 :. 기본 (method(self, request, dummy=None)

포기와 키워드 인수를 추가 두 번째 인수는 pattern으로 키워드 사용을 사용해야합니다.

둘째, 나는 routetraverse에 대해 동일한 패턴을 가질 수 있다고 생각하지 않습니다. traverse 키워드를 사용하면 root이 시작되어야하는 위치를 정의 할 수 있습니다. Configurator API documentation에 설명되어 있습니다.

발생하는 오류 예외가 더 유익 할 수 있습니다.

+0

하이브리드 방식으로 트리를 사용할 때 URL Dispatch에서 비슷한 traverse = as pattern = 인수를 사용하는 것이 타당합니다. 또한 패턴은 add_route의 키워드 인수이지만 기본적으로 모든 문서는이를 위치 인수로 처리합니다. –