App Engine给出有关过期文件的错误

时间:2019-06-27 13:59:15

标签: python google-app-engine flask

非常清楚,这是有关我的设置的一些初始信息:

平台:Google App Engine

环境类型:标准

运行时: Python 3

Python框架: Flask

Web服务器: Gunicorn,有2名员工

这是在GAE标准python3运行时上运行的flask应用。

相关文件结构:

- api.py
- services/
---- HighLow.py

您可以从文件结构中看到,烧瓶的主应用程序文件为api.py

api.py然后导入services/HighLow.py

HighLow.py中的相关代码:

def get_today_for_user(self, uid):
    #Connect to MySQL
    conn = pymysql.connect(self.host, self.username, self.password, self.database, cursorclass=pymysql.cursors.DictCursor)
    cursor = conn.cursor()

    uid = bleach.clean(uid)

    cursor.execute("SELECT * FROM highlows WHERE uid='{}' AND DATE(_timestamp) = CURDATE();")

    highlow = cursor.fetchone()

    conn.commit()
    conn.close()

    if highlow == None:
        return {
            "high":"",
            "low":"",
            "total_likes": 0,
            "high_image": "",
            "low_image": ""
        }

    return highlow

如果您想查看完整的代码以获得更好的上下文,可以在我们的GitHub存储库上查看它:https://github.com/highlowapp/highlowbackend

问题:

此设置已经运行了一段时间了,我对此非常满意。但是,我最近开始从GCP的错误报告中获取此错误:

File "/srv/services/HighLow.py", line 380: 'low_image': ""
    at <module> (/srv/api.py:8)
    at <module> (/srv/wsgi.py:1)
    at import_app (/env/lib/python3.7/site-packages/gunicorn/util.py:350)
    at load_wsgiapp (/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py:41)
    at load (/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py:52)
    at wsgi (/env/lib/python3.7/site-packages/gunicorn/app/base.py:67)
    at load_wsgi (/env/lib/python3.7/site-packages/gunicorn/workers/base.py:138)
    at init_process (/env/lib/python3.7/site-packages/gunicorn/workers/base.py:129)
    at spawn_worker (/env/lib/python3.7/site-packages/gunicorn/arbiter.py:583)

此错误使我感到困惑,原因有两个:

  1. 它没有给出任何例外,只是“宣布”了第380行中的'low_image': ""
  2. 当我更新代码以更改该行时,它给了我同样的错误。换句话说,它说行380是:'low_image': "",实际上(您可以在GitHub存储库上进行验证)是:"low_image": ""(带双引号)。我也尝试过简单地删除该行,但是错误仍然出现。

我尝试删除应用程序引擎的存储桶并重新运行gcloud app deploy,但该错误消息根本没有改变。

我的问题

为什么会收到此错误消息,以及如何解决?

编辑:

如上所述,我已经尝试删除staging存储桶,但这没用。

我还使用了带有Stackdriver的“源”工具来验证代码是否已更新。

最后,我尝试在一个单独的项目中创建一个新的App Engine应用程序,并且代码可以正常工作……只是我的代码中存在相同的错误(也许我现在只是忘记了逗号?),这使得在另一个文件中发生相同的错误。

所以我更新了文件,重新部署了,瞧!我的应用程序有效!

但是,我需要它在当前项目中工作,而不是在测试项目中工作。我需要一种方法来清除GAE知道的任何事情,然后重新开始。有没有办法做到这一点?还是有人知道我为什么首先遇到问题?

1 个答案:

答案 0 :(得分:0)

好吧,我终于找到了解决方法,并想与遇到此问题的其他人分享。

您知道技术支持人员总是如何告诉您尝试将其关闭然后再打开吗?让我告诉你,它有效。

我去了App Engine -> Settings -> Disable Application,让它禁用,然后用App Engine -> Settings -> Enable Application重新启用它。

我猜只是需要“重启”。