代码之家  ›  专栏  ›  技术社区  ›  EMP

Pylons错误“没有为此线程注册任何对象(名称:request)”,debug=false

  •  0
  • EMP  · 技术社区  · 16 年前

    我无法访问数据库 request 设置时我的挂架0.9.7控制器中的对象 debug = false 在.ini文件中。我有以下代码:

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

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

    如果我设定 调试=错误

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

    堆栈跟踪确认错误在堆栈上 print('!!! request.params = %r' % request.params) 线

    我使用粘贴服务器运行它,这两行是我的控制器方法的第一行。

    只有当我 yield

    1. 我如何使它与 ?
    2. 为什么它与 debug = true ? 显然这是一个非常危险的bug,因为我通常使用 调试=真 ,因此在开发过程中可能会被忽略。
    2 回复  |  直到 16 年前
        1
  •  2
  •   Yaroslav    16 年前

    你不应该直接从行动中屈服。尝试生成内部函数并返回func():

    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()
    
        2
  •  0
  •   rectalogic    12 年前

    设置中间件时,请在RegistryManager中启用流式传输支持:

    app = RegistryManager(app, streaming=True)