将 Flask 应用程序部署到 Heroku 时出现奇怪的“is_xhr”错误

Posted

技术标签:

【中文标题】将 Flask 应用程序部署到 Heroku 时出现奇怪的“is_xhr”错误【英文标题】:Weird "is_xhr" error when deploying Flask app to Heroku 【发布时间】: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 这是一个列表。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于将 Flask 应用程序部署到 Heroku 时出现奇怪的“is_xhr”错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥在将应用程序部署到 Heroku 时出现此错误?

尝试将流式应用程序部署到 Heroku 时出现 AttributeError

尝试将 Rails 应用程序部署到 heroku 时出现 Uglifier 错误

运行“工头启动”/将 Django 应用程序部署到 Heroku 时出现问题

部署到 heroku 时出现错误“无法加载资源 404”bundle.js

Heroku 部署混乱:Vue.js 前端与 Flask 后端