【问题标题】:Weird "is_xhr" error when deploying Flask app to Heroku将 Flask 应用程序部署到 Heroku 时出现奇怪的“is_xhr”错误
【发布时间】:2020-05-24 16:18:18
【问题描述】:

我有一个已部署到 Heroku 的烧瓶应用程序,其中一条路线如下

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 这是一个列表。

【问题讨论】:

    标签: heroku flask


    【解决方案1】:

    Werkzeug 库(依赖于 Flask)最近收到了重大更新(0.16.1 --> 1.0.0),看起来Flask

    你有两个选择:

    • 坚持使用当前版本的 Flask,并通过指定 werkzeug<1.0werkzeug==0.16.1 来限制在应用程序的 setup.py 或 requirements.txt 中显式获取的 Werkzeug 版本

    • 升级到最新版本的 Flask (>=1.0.0),在最新的 Werkzeug 上运行良好

    【讨论】:

    • 将此werkzeug==0.16.1 添加到 requirements.txt 解决了这个问题。谢谢
    • 我的烧瓶 (1.1.2) 和 Werkzeug (1.0.1)。无论如何,我有同样的错误。
    【解决方案2】:

    我也遇到过这个问题。

    只是通过直接签入请求头来临时修复

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

    不确定是否有帮助...

    【讨论】:

      【解决方案3】:

      或者你可以通过调用再次强制安装鸨

      pip install Werkzeug==0.16.1
      

      【讨论】:

        猜你喜欢
        • 2019-05-22
        • 2021-03-12
        • 1970-01-01
        • 2020-10-21
        • 2017-07-07
        • 2013-02-15
        • 2022-09-25
        • 2018-11-23
        相关资源
        最近更新 更多