目录

10 排错清单与练习

排错总原则

按链路从外到内排查:

客户端
  -> 网络 / DNS / HTTPS
  -> IIS 或 rhino.compute
  -> compute.geometry 子进程
  -> Rhino.Inside / Rhino 授权
  -> Grasshopper / 插件 / 自定义端点
  -> 输入数据和业务逻辑

不要一开始就修改 Grasshopper 定义或服务器参数。先确认错误发生在哪一层。

快速健康检查

在服务器本机或客户端访问:

http://server/version
http://server/healthcheck
http://server/activechildren
http://server/sdk

判断:

401 Unauthorized

含义:请求未通过 API Key 认证。

检查:

修复:

RhinoComputeKey: your-secret-api-key

500 Internal Server Error

含义:服务器处理请求时异常。

常见原因:

处理:

HRESULT E_FAIL / 授权失败

常见含义:RhinoCompute 启动 Rhino 时找不到有效授权。

本地开发:

服务器:

超时

可能有两类:

检查:

处理:

Request body too large

含义:请求体超过 Compute 限制。默认上限常见约 50 MB。

处理:

[System.Environment]::SetEnvironmentVariable('RHINO_COMPUTE_MAX_REQUEST_SIZE', '104857600', 'Machine')

然后重启服务。

但提高限制不是首选方案。更好的方式:

Hops 定义不更新输入输出

检查:

插件相关问题

检查顺序:

  1. 普通 Rhino 是否能加载插件?
  2. 普通 Rhino 中插件命令是否能运行?
  3. Compute 启动日志中是否看到插件加载?
  4. /sdk 是否列出自定义端点?
  5. 插件是否依赖 UI、窗口、当前文档、用户选择?
  6. 插件授权是否在服务器账户下生效?

最小复现模板

排错时记录以下信息:

项目 内容
时间 发生错误的精确时间。
Compute URL 例如 http://server:80/
端点 例如 /grasshopper 或自定义路径。
HTTP 状态码 401、500、timeout 等。
请求体大小 byte 或 MB。
Rhino/Compute 版本 /version 或日志获取。
子进程数量 /activechildren 或启动参数。
API Key 状态 是否配置,不记录真实 key。
GH 定义版本 文件名、版本号、最后修改时间。
插件清单 相关第三方插件版本。
日志片段 异常堆栈或关键错误行。

综合练习

练习 1:本地启动 Compute,访问 /version/healthcheck/sdk

练习 2:配置 RHINO_COMPUTE_KEY,用错误 key 发起 POST,确认返回 401。

练习 3:创建一个 Hops 函数,输入两个数字,输出相加结果。分别在本地和远程 Compute 上求解。

练习 4:把一个 Grasshopper 定义改造成无交互版本,移除所有依赖当前 Rhino 文档选择的步骤。

练习 5:写一个自定义 Compute 端点,输入 Curve 和系数,输出调整后的面积,并确认 /sdk 中可见。

练习 6:构造一个超时或大请求体场景,观察日志,再调整 RHINO_COMPUTE_TIMEOUTRHINO_COMPUTE_MAX_REQUEST_SIZE

结业检查

参考资料