Google Cloud Function 完成状态:'connection error'
Google Cloud Function finished with status: 'connection error'
我有一个由 Github webhook 调用的 HTTP Cloud Function (Python 3.7),当事件类型不是拉取请求。当它没有进入 if 块时,它总是干净地退出。
函数如下:
def my_func(request):
event = request.headers.get("X-GitHub-Event", "unknown")
if event != "pull_request":
print("This is not a pull request")
return "This is not a pull request", 200
return "OK", 200
在日志中显示为:
"This is not a pull request"
"Function execution took 11 ms, finished with status: 'connection error'"
而在 Github 端,响应是消息 "Error: could not handle the request" 的 HTTP/500 错误。
我已将它作为一个新函数重新部署到另一个项目中,但同样的事情发生了。有时,对于同一事件,一个函数会 return 200 而另一个 returns 500。知道这里发生了什么吗?谢谢:)
您似乎达到了 Max uncompressed HTTP request size in Cloud functions 的极限,即 10MB。这可能就是为什么有些请求可以,有些不行的原因。
您可能需要考虑使用 Google App Engine 或以某种方式限制来自 Github 的 request/response 的大小。
更新:
唯一值得测试的另一件事是尝试为几种请求类型设置 if else 条件,以消除出现问题的可能性。
例如:
def my_func(request):
event = request.headers.get("X-GitHub-Event", "unknown")
if event == "[Type1]":
print("This is [Type1]")
return "This is not a pull request", 200
elif event == "[Type2]":
print("This is [Type2]")
return "OK", 200
看看完全相同的代码是否可以通过使用 GAE 而不是 Cloud Functions 来工作会很有趣
否则这将是 webhook 的特定问题,需要在 Github webhook 处理程序的 Github 回购协议或最合适的位置报告。
我有一个由 Github webhook 调用的 HTTP Cloud Function (Python 3.7),当事件类型不是拉取请求。当它没有进入 if 块时,它总是干净地退出。
函数如下:
def my_func(request):
event = request.headers.get("X-GitHub-Event", "unknown")
if event != "pull_request":
print("This is not a pull request")
return "This is not a pull request", 200
return "OK", 200
在日志中显示为:
"This is not a pull request"
"Function execution took 11 ms, finished with status: 'connection error'"
而在 Github 端,响应是消息 "Error: could not handle the request" 的 HTTP/500 错误。
我已将它作为一个新函数重新部署到另一个项目中,但同样的事情发生了。有时,对于同一事件,一个函数会 return 200 而另一个 returns 500。知道这里发生了什么吗?谢谢:)
您似乎达到了 Max uncompressed HTTP request size in Cloud functions 的极限,即 10MB。这可能就是为什么有些请求可以,有些不行的原因。
您可能需要考虑使用 Google App Engine 或以某种方式限制来自 Github 的 request/response 的大小。
更新:
唯一值得测试的另一件事是尝试为几种请求类型设置 if else 条件,以消除出现问题的可能性。
例如:
def my_func(request):
event = request.headers.get("X-GitHub-Event", "unknown")
if event == "[Type1]":
print("This is [Type1]")
return "This is not a pull request", 200
elif event == "[Type2]":
print("This is [Type2]")
return "OK", 200
看看完全相同的代码是否可以通过使用 GAE 而不是 Cloud Functions 来工作会很有趣
否则这将是 webhook 的特定问题,需要在 Github webhook 处理程序的 Github 回购协议或最合适的位置报告。