云引擎常见问题
云引擎功能
云引擎都支持哪些语言?
目前支持 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 使用指南 § 使用超级权限。
部署
多次部署同一个项目时镜像大小为什么差别那么大?
云 引擎底层有一套缓存机制以加速构建过程,所以部署时显示的「存储镜像到仓库」后面的大小表示本次构建新产生的数据,可用于评估是否利用到了缓存,不代表整个项目的大小。
部署时长时间卡在「正在下载和安装依赖」怎么办?
这个步骤对应在云端调用各个语言的包管理器(npm、pip、composer、maven)安装依赖的过程,我们有一个依赖缓存机制来加速这个安装过程,但缓存可能会因为很多原因失效(比如修改了依赖列表),在缓存失效时会比平时慢很多,请耐心等待。如果你在 leanengine.yaml 中指定了系统依赖也会在这个步骤中安装,因此请不要添加未用到的依赖。
对于 Node.js 建议检查是否在 package-lock.json 或 yarn.lock 中指定了较慢的源。
部署到多个实例时,部分实例失败需要重新部署吗?
同一环境(预备/生产)下有多个实例时,云引擎会同时在所有实例上部署项目。如因偶然因素部分实例部署不成功,会在几分钟后自动尝试再次部署,无需手动重新部署。