【问题标题】:Flask-Mobility failing with GunicornGunicorn 导致 Flask-Mobility 失败
【发布时间】:2017-08-06 12:39:21
【问题描述】:

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

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

当我通过仅将应用程序作为 python 实例运行来测试应用程序时,没有 gunicorn 也没有工人等,它工作得很好。我看到 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'

【问题讨论】:

  • 你能添加完整的回溯吗?
  • 你能添加你的相关代码吗?

标签: python flask gunicorn


【解决方案1】:

我已经弄清楚出了什么问题。问题不在于 gunicorn,而在于使用蓝图。我修改了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) 进行初始化,一切正常。不完全确定为什么它以前没有 gunicorn 也能正常工作,但很可能是因为我在两种不同的上下文中使用了相同的名称 app,而且碰巧它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2021-08-26
    • 2018-08-17
    • 1970-01-01
    • 2013-12-10
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多