Dziwny błąd „is_xhr” podczas wdrażania aplikacji Flask na Heroku

29

Mam aplikację kolby, którą wdrożyłem w Heroku, jedna z tras jest następująca

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

Kiedy testuję ten punkt końcowy lokalnie, nie mam problemów z wysyłaniem żądań POST i GET do tego punktu końcowego. Jednak po wdrożeniu w Heroku pojawia się następujący błąd:

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'

Nigdy nie widziałem tego błędu Request object has no attribute 'is_xhr' i wydaje się, że dzieje się to tylko wtedy, gdy wdrażam w Heroku. Wszelkie wskazówki na temat tego, na co powinienem spojrzeć?

Wydaje się również, że nie ma problemu z kluczem json keyword_data- wydaje się, że problem jest ograniczony do query_resultslisty.

Tom Jackson
źródło

Odpowiedzi:

39

WerkzeugBiblioteka (zależność od Flask) otrzymał ostatnio główną aktualizację (0.16.1 -> 1.0.0) i wygląda na to Flask(<= 0.12.4) nie ogranicza go.

Masz 2 opcje:

  • Trzymaj się obecnej wersji Flask i ogranicz wersję Werkzeug, która jest jawnie pobierana z pliku setup.py lub wymagania.txt ( werkzeug<1.0) aplikacji

  • Uaktualnij do najnowszej wersji Flask (> = 1.0.0), która działa poprawnie z najnowszą wersją Werkzeug

drań
źródło