首页 文章

与Gunicorn一起失败的Flask-Mobility

提问于
浏览
0

我正在使用 Flask-Mobility 基于浏览器呈现不同的模板 .

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

当我通过仅将其作为python实例运行来测试应用程序时,没有枪支,没有 Worker 等,它的工作正常 . 我看到Flask-Mobility做了 @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 回答

  • 0

    我弄清楚出了什么问题 . 问题不在于枪炮,而在于使用蓝图 . 我修改了 Flask-MobilityMobility __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 并且偶然地,它起作用了 .

相关问题