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

烧瓶机动性因Gunicorn而失效

  •  0
  • contrariwise  · 技术社区  · 8 年前

    我正在使用 Flask-Mobility 根据浏览器呈现不同的模板。

    在我的本地机器上一切都很好,但在服务器上,我得到了 AttributeError: 'Request' object has no attribute 'MOBILE' 我正在使用 gunicorn

    当我测试应用程序时,只将其作为python实例运行,没有gunicorn和worker等,它运行得很好。我看到烧瓶的流动性 @app.before_request 我猜当我使用Gunicorn时,这没有被处理。

    失败的线路是:

    if request.MOBILE == True:
    

    ERROR in app: Exception on /content/3/intro-to-genetics-1/1/baby-ball [GET]
    Traceback (most recent call last):
      File "virtualenv/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
        response = self.full_dispatch_request()
      File "virtualenv/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "virtualenv/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "virtualenv/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "virtualenv/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
        rv = self.dispatch_request()
      File "virtualenv/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "virtualenv/lib/python3.5/site-packages/flask_mobility/decorators.py", line 35, in wrapper
         return f(*args, **kwargs)
    File "app/main/views.py", line 333, in direct_screen_nav
        if request.MOBILE == True:
    File "virtualenv/lib/python3.5/site-packages/werkzeug/local.py", line 347, in __getattr__
        return getattr(self._get_current_object(), name)
    AttributeError: 'Request' object has no attribute 'MOBILE'
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   contrariwise    8 年前

    我已经找出了问题所在。问题不在于古尼康,而在于使用蓝图。我修改了 Flask-Mobility Mobility __init__ def init_app()

    if blueprint is not None:
        @blueprint.before_app_request
        def before_app_request():
            ctx = stack.top
            if ctx is not None and hasattr(ctx, 'request'):
                self.process_request(ctx.request)
    

    因此,不是将库初始化为 Mobility(app) ,我用初始化 Mobility(app, blueprint) app 在两种不同的情况下,通过偶然事件,它起了作用。