2017-08-06 9 views
0

Flask-Mobility私はFlask-Mobilityを使用して、ブラウザに基づいて異なるテンプレートをレンダリングしています。GunicornでFlask-Mobilityが失敗する

すべてはローカルマシンで正常に動作しましたが、サーバー上ではAttributeError: 'Request' object has no attribute 'MOBILE'私はgunicornを使用しています。

私はpythonのインスタンスとしてのみ、gunicornと労働者などなしでそれを実行してアプリケーションをテストすると、それは正常に動作します。 Flask-Mobilityはを実行していることがわかります。私は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

私が間違っていたものを考え出しました。問題はガンコンではなく、ブループリントを使用したことでした。私はオプションの引数として任意の青写真を取る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を2つの異なるコンテキストで使用していたため、うまくいきました。

関連する問題