云引擎常见问题
云引擎功能
云引擎都支持哪些语言?
目前支持 Node.js、Python、Java、PHP、.NET、Go 运行环境,也支持基于 Node.js 的 Web 前端项目 ,详见 云引擎服务总览。
如果你还需要其他运行环境的支持,欢迎向我们反馈。
云引擎支持托管纯静态网站吗?
支持,请看 云引擎 Web 前端应用运行环境。
云引擎支持 HTTPS 吗?
支持,在绑定自定义域名时可以上传 SSL 证书或自动管理证书。
绑定自定义域名时还可以配置「强制 HTTPS」来实现自动跳转。
部署更新云引擎会导致服务中断吗?
服务不会中断。在代码部署时,系统会优先启动使用新版本代码的实例,待新实例通过了健康检查,系统修改路由将请求转发至新实例后,再关闭旧版本的实例,让服务保持零中断。
云引擎和云函数是什么关系?
云引擎是一个托管后端服务的平台,适用于所有的 Web 后端应用,对于程序内部的逻辑没有侵入。
在此基础上,开发者可以选择在程序内接入云引擎的 SDK,来使用云函数和 Hook 等功能,云函数与 数据存储 服务有深度的整合,对于已经在使用数据存储服务的开发会非常方便。
不接入云引擎 SDK 也可以使用云函数以外的所有功能,云引擎也提供了业界广泛使用的 Redis 和 MySQL 供开发者存储数据。
云函数
云函数有哪些限制?
云函数是 TDS 提供的一个 相对受限 的自定义服务器端逻辑的功能,和我们的 SDK 有比较 深度的集成。我们将云函数设计为一种类似 RPC 的机制,在云函数中你只能关注参数和结果,而不能自定义超时时间、HTTP method、URL,不能读取和设置 Header。
如果希望更加自由地使用这些 HTTP 的语义化功能,或者希望使用第三方的框架提供标准的 RESTful API,请在你的应用中自行来处理 HTTP 请求而不是使用云函数。
云函数可以同时存在于多个分组么?
云引擎会自动将一个应用下的云函数请求转发到正确的分组,因此你可以同时在多个分组下使用云函数。
项目部署成功了,但云函数和 Hook 不可用?
为了支持云引擎的云函数和 Hook 功能,云引擎的管理程序会使用 /1.1/functions/_ops/metadatas
这个 URL 和 SDK 交互,请确保将这个 URL 交给 SDK 处理。
默认情况下,云引擎会尝试从 /1.1/functions/_ops/metadatas
获取云函数和 Hook 的元信息,如果失败,则云函数和 Hook 功能不可用,但不会中断部署。
如果希望在获取元信息失败后中断部署,可以在 leanengine.yaml
文件中指定 functionsMode
为 strict
。
如果应用不使用云函数和 Hook 功能,那么你可以:
- 在
leanengine.yaml
中不指定functionsMode
,同时/1.1/functions/_ops/metadatas
返回一个 HTTP404
表示不使用云函数和 Hook 相关的功能; - 或者在
leanengine.yaml
中指定functionsMode
为disabled
。注意,这种情况下,即使应用代码中定义了云函数和 Hook,Hook 也不会生效,云函数调用(通过 SDK 发起远程调用或通过 REST API 向 API 域名发起云函数调用)有可能因为被转发到错误的云引擎分组而失败。
部署中断,提示有同名云函数怎么办?
云引擎支持多个分组。
如果当前部署代码中部分云函数与其他组的同名,默认情况会提示错误并中断部署,防止意外重复定义云函数。
我们建议你移除不需要的云函数,毕竟重复定义的 云函数并不易于理解和维护。
不过,你也可以通过在每次部署时额外指定 --overwrite-functions
参数强制替换其他组云函数的实现。
为什么 Class Hook 没有被运行?
首先确认一下 Hook 被调用的时机是否与你的理解一致:
beforeSave
:对象保存或创建之前afterSave
:对象保存或创建之后beforeUpdate
:对象更新之前afterUpdate
:对象更新之后beforeDelete
:对象删除之前afterDelete
:对象删除之后onVerified
:用户通过邮箱或手机验证后onLogin
:用户在进行登录操作时(become(sessionToken)
不是登录操作,因此不会调用onLogin
)
还需注意在本地进行云引擎调试时,运行的会是线上预备环境的 Hook,如果没有预备环境则不会运行。
然后检查 Hook 函数是否被执行过:
可以先在 Hook 函数的入口打印一行日志,然后进行操作,再到云引擎日志中检查该行日志是否被打印出来,如果没有看到日志原因可能包括:
- 代码没有被部署到正确的应用
- 代码没有被部署到生产环境(或没有部署成功)
- Hook 的类名不正确
如果日志已打出,则继续检查函数是否成功,检查控制台上是否有错误信息被打印出。如果是 before 类 Hook,需要保证 Hook 函数在 15 秒内结束,否则会被系统认为超时。
after 类 Hook 超时时间为 3 秒,如果你的体验实例已经休眠,很可能因为启动时间过长无法收到 after 类 Hook,建议升级到云引擎的标准实例避免休眠。
可以在云函数中未登录的情况下查询 _User 表吗?
在云函数里可以用 masterKey 跳过权限检查,未登录也可直接查询 _User 表。
因为云引擎运行在可信的服务器端环境中,所以你可以全局开启超级权限(Master Key
),这样云端会跳过包括 ACL 和 Class 权限在内的检查,让你自由地操作所有云存储中的数据。具体细节可以参考 云引擎 SDK 使用指南 § 使用超级权限。
部署
多次部署同一个项目时镜像大小为什么差别那么大?
云引擎底层有一套缓存机制以加速构建过程,所以部署时显示的「存储镜像到仓库」后面的大小表示本次构建新产生的数据,可用于评估是否利用到了缓存,不代表整个项目的大小。