2017-08-06 49 views
0

我使用Flask-Mobility來呈現基於瀏覽器的不同模板。燒瓶移動性與Gunicorn失敗

一切工作我的本地機器上很好,但在服務器上,我得到我使用gunicornAttributeError: 'Request' object has no attribute 'MOBILE'

當我運行它僅作爲一個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' 
+0

你可以添加完整的追溯? –

+0

你可以添加你的相關代碼片嗎? – Nabin

回答

0

我已經想通了,什麼是錯的。這個問題不是用gunicorn,而是用Blueprints。我修改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,並且偶然發生,它起作用了。