FlaskアプリをHerokuにデプロイするときの奇妙な「is_xhr」エラー


29

Herokuにデプロイしたフラスコアプリがあります。ルートの1つは次のとおりです

def get_kws():
    seed_kw = request.json['firstParam']
    audience_max = request.json['secondParam']
    interest_mining_service = InterestMiningService(seed_kw, audience_max)
    query_result = interest_mining_service.query_keyword().tolist()
    if seed_kw in query_result:
        print ("yes")
        return jsonify(
            {
             'keyword_data' : interest_mining_service.find_kws().to_json(orient='records'),
             'query_results': query_result
            }
        )

このエンドポイントをローカルでテストすると、POSTおよびGETリクエストをそのエンドポイントに送信するときに問題は発生しません。しかし、Herokuにデプロイすると、次のエラーが発生します。

File "/app/server/controller.py", line 24, in get_kws
2020-02-08T22:31:05.893850+00:00 app[web.1]: 'query_results': query_result
2020-02-08T22:31:05.893850+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/json.py", line 298, in jsonify
2020-02-08T22:31:05.893851+00:00 app[web.1]: if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
2020-02-08T22:31:05.893851+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
2020-02-08T22:31:05.893852+00:00 app[web.1]: return getattr(self._get_current_object(), name)
2020-02-08T22:31:05.893858+00:00 app[web.1]: AttributeError: 'Request' object has no attribute 'is_xhr'

このエラーはこれまで見たことがなくRequest object has no attribute 'is_xhr'、Herokuにデプロイしたときにのみ発生しているようです。何を調べるべきかについてのガイダンスはありますか?

また、jsonキーには問題がないようですkeyword_data-問題query_resultsはリストに限定されているようです。

回答:


39

Werkzeugライブラリー(からの依存関係がFlask)最近のメジャーアップデート(0.16.1 - > 1.0.0)を受けたと同じように見えますFlask(<= 0.12.4)、それを制限するものではありません。

次の2つのオプションがあります。

  • 現在のバージョンのFlaskを使い続け、アプリケーションのsetup.pyまたはrequirements.txtで明示的にフェッチされるWerkzeugバージョンを制限します(werkzeug<1.0

  • 最新のWerkzeugで問題なく動作しているFlaskの最新バージョン(> = 1.0.0)にアップグレードします。


0

私もこの問題に直面しました。

リクエストヘッダーを直接チェックインすることで一時的に修正されました

request.headers.get("X-Requested-With") == "XMLHttpRequest"

このヘルプがわからない...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.