本地部署的Appwrite Dart函数执行超时问题求助
问题
本地部署Dart 2.17版本的Appwrite函数,使用appwrite init function创建后直接部署执行正常,但添加包含团队创建、数据库及集合配置的业务代码后,执行始终返回超时错误(添加try/catch无效)。
相关信息
配置详情
- 函数控制台.env配置:
APPWRITE_FUNCTION_ENDPOINT=http://localhost/v1 APPWRITE_FUNCTION_API_KEY=%MyKey%
- 业务代码路径:
functions/Create Company/lib/main.dart(含团队创建、数据库及集合配置完整逻辑) - 依赖配置路径:
functions/Create Company/lib/pubspec.yaml - 项目及函数配置路径:
appwrite.json
错误现象
执行时控制台Response和Logs标签页为空,Errors标签页显示:
An internal curl error has occurred within the executor! Error Msg: Operation timed out
docker logs appwrite-executor末尾日志同样出现上述curl超时错误。
解决步骤
1. 修正Appwrite端点地址
本地Docker环境中,函数容器无法通过localhost访问Appwrite主服务,需替换为Docker内部服务名称。将.env中的APPWRITE_FUNCTION_ENDPOINT修改为:
APPWRITE_FUNCTION_ENDPOINT=http://appwrite/v1
(若自定义过Docker Compose中的Appwrite服务名,替换为对应名称)
2. 优化业务代码逻辑
- 排查是否存在长时间阻塞的操作(如批量创建资源的循环),拆分任务或添加合理的异步超时控制
- 确保所有异步调用都通过
await等待完成,避免后台未完成的操作导致超时
3. 调整函数执行超时阈值
在Appwrite控制台的函数设置中,找到「执行超时」选项,默认值可能为15秒,根据业务复杂度适当调高(如30秒或60秒)
4. 验证容器网络连通性
进入函数执行容器,测试与Appwrite主服务的连通性:
# 获取函数执行容器ID docker ps | grep appwrite-executor # 进入容器 docker exec -it <容器ID> /bin/bash # 发起健康检查请求 curl http://appwrite/v1/health
若请求失败,检查Docker网络配置,确保函数容器与Appwrite主服务处于同一个Docker网络(默认网络名为appwrite)
5. 确认API密钥权限
检查APPWRITE_FUNCTION_API_KEY的权限范围,确保覆盖业务代码中所有操作(如团队创建、数据库/集合读写),避免因权限不足导致请求挂起超时
内容的提问来源于stack exchange,提问作者Panth
相关产品推荐
相关产品推荐

