Seltsamer "is_xhr" -Fehler beim Bereitstellen der Flask-App auf Heroku

29

Ich habe eine Flaschen-App, die ich für Heroku bereitgestellt habe. Eine der Routen ist die folgende

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
            }
        )

Wenn ich diesen Endpunkt lokal teste, treten beim Senden von POST- und GET-Anforderungen an diesen Endpunkt keine Probleme auf. Bei der Bereitstellung auf Heroku wird jedoch die folgende Fehlermeldung angezeigt:

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'

Ich habe diesen Fehler noch nie gesehen Request object has no attribute 'is_xhr' und er scheint nur zu passieren, wenn ich ihn in Heroku bereitstelle. Irgendwelche Anleitungen, worauf ich achten sollte?

Es scheint auch kein Problem mit dem json-Schlüssel zu geben keyword_data- das Problem scheint auf query_resultseine Liste beschränkt zu sein .

Tom Jackson
quelle

Antworten:

39

Die WerkzeugBibliothek (Abhängigkeit von Flask) hat kürzlich ein umfangreiches Update erhalten (0.16.1 -> 1.0.0) und es sieht so aus, als ob Flask(<= 0.12.4) es nicht einschränkt.

Sie haben 2 Möglichkeiten:

  • Halten Sie sich an Ihre aktuelle Version von Flask und beschränken Sie die Werkzeug-Version, die explizit in der setup.py oder in den Anforderungen.txt ( werkzeug<1.0) Ihrer Anwendung abgerufen wird.

  • Aktualisieren Sie auf eine aktuelle Version von Flask (> = 1.0.0), die mit dem neuesten Werkzeug einwandfrei funktioniert

Bagerard
quelle
0

Ich habe mich auch mit diesem Problem konfrontiert.

Nur vorübergehend durch direktes Einchecken des Anforderungsheaders behoben

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

Ich bin mir nicht sicher, ob diese Hilfe ...

Jing
quelle