为什么函数计算调用之后是404?

为什么函数计算调用之后是404?我创建的是一个古文标点的测试函数,这样调用的:curl -X POST -d "婦女終嵗勤勤大半爲此" https://
biaodian-wccehmhlas.cn-hangzhou.fcapp.run
我的函数代码是这样的:
import os
import tempfile
import requests
import torch
from transformers import pipeline
from flask import Flask, request

model_dir = '/usr/src/app/guwen-biaodian'

app = Flask(name)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
pipe = pipeline("token-classification", model=model_dir, device=device)

@app.route('/invoke', methods=['POST'])
def invoke():
request_id = request.headers.get("x-fc-request-id", "")

print("FC Invoke Start RequestId: " + request_id)

text = request.get_data().decode("utf-8")

punctuated_text = pipe(text)
punctuations = [p['entity'] for p in punctuated_text]
punctuation_indices = [p['start'] for p in punctuated_text]

punctuated = "".join(text[i] if i not in punctuation_indices else text[i] + punctuations[punctuation_indices.index(i)] for i in range(len(text)))

print("FC Invoke End RequestId: " + request_id)

return punctuated + "\n"

if name == 'main':
app.run(debug=False, host='0.0.0.0', port=9000)

展开
收起
三分钟热度的鱼 2024-04-10 19:12:18 71 分享 版权
阿里云 AI 助理回答

问题分析

根据您提供的信息,您在调用阿里云函数计算时遇到了404错误。结合知识库中的参考资料,404错误通常与以下原因相关:

  1. 访问路径不匹配:函数代码中定义的路由路径与实际请求的URL路径不一致。
  2. 缺少必要的Header:某些情况下需要添加特定的Header(如x-fc-invocation-target)才能正确触发函数。
  3. 域名配置问题:如果使用自定义域名或子域名,可能未正确绑定或配置路径。

接下来,我们将针对您的具体情况逐一排查并提供解决方案。


问题现象

您提供的调用命令如下:

curl -X POST -d "婦女終嵗勤勤大半爲此" https://biaodian-wccehmhlas.cn-hangzhou.fcapp.run

函数代码中定义的路由为:

@app.route('/invoke', methods=['POST'])
def invoke():
    ...

从上述信息可以看出,您调用的URL路径为根路径/,而函数代码中定义的路径为/invoke。这导致了路径不匹配,从而引发404错误。


解决方案

方法一:修改调用路径

根据函数代码中定义的路由/invoke,您需要将调用命令中的URL路径调整为/invoke。修改后的调用命令如下:

curl -X POST -d "婦女終嵗勤勤大半爲此" https://biaodian-wccehmhlas.cn-hangzhou.fcapp.run/invoke

这样可以确保请求路径与函数代码中的路由定义一致。

方法二:修改函数代码

如果您希望保持当前的调用路径(即根路径/),可以修改函数代码中的路由定义,将其改为根路径/。修改后的代码如下:

@app.route('/', methods=['POST'])
def invoke():
    ...

修改完成后,重新部署函数即可。

方法三:增加特定Header

如果您的函数计算环境要求使用特定Header(如x-fc-invocation-target),可以在调用命令中添加该Header。例如:

curl -X POST -H "x-fc-invocation-target: /invoke" -d "婦女終嵗勤勤大半爲此" https://biaodian-wccehmhlas.cn-hangzhou.fcapp.run

这种方式适用于某些特殊配置的函数计算环境。

方法四:检查域名配置

如果您使用的是子域名(如https://biaodian-wccehmhlas.cn-hangzhou.fcapp.run),请确保子域名已正确绑定到函数,并且路径配置无误。如果路径未正确映射,建议参考知识库中的“绑定自定义域名”部分进行配置。


重要提醒

  • 路径匹配规则:函数计算的路由路径必须与函数代码中定义的路径完全一致,否则会导致404错误。
  • Header配置:某些函数计算环境可能要求添加特定Header(如x-fc-invocation-target),请根据实际情况调整。
  • 部署生效:如果您修改了函数代码,请确保成功部署后再次测试。

总结

根据您的描述,最可能的原因是调用路径与函数代码中的路由定义不一致。建议优先尝试方法一(修改调用路径)或方法二(修改函数代码)。如果问题仍未解决,请检查域名配置或添加必要的Header。

希望以上解答能够帮助您解决问题!如有其他疑问,请随时联系。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:

快速交付实现商业价值。

还有其他疑问?
咨询AI助理