fix(models): Assimp 缺失时给出可操作报错,部署脚本自动安装
现象:服务器未安装 Assimp,上传 PMX 压缩包只得到 GLB 直出:导出失败(ENOENT):spawn assimp ENOENT glTF 直出:导出失败(ENOENT):spawn assimp ENOENT 用户看不出缺什么、怎么装,也不知道只传 glb/vrm 其实不需要它。 修复: 1. 新增 src/common/assimp.ts:按 ASSIMP_BIN -> PATH -> /usr/bin、/usr/local/bin 等常见目录定位可执行文件(只认文件,不认同名目录),转换前先预检; 找不到就一次性给出各发行版安装命令、查过的路径与替代办法, 不再打两条 ENOENT。动作预处理(FBX/glTF -> BVH)复用同一文案。 2. 新增 deploy/assimp-lib.sh:install.sh 按发行版自动安装 (apt-get / dnf / yum / zypper / apk / pacman),装在非常规目录时把绝对 路径写入 deploy/.env 的 ASSIMP_BIN;装不上只告警不中止,可用 SKIP_ASSIMP_INSTALL=1 跳过。check-access.sh 自检增加 Assimp 一行。 3. /health 增加 assimp.path;管理端「概览 -> 服务健康」显示 Assimp 状态, 不可用时给出安装提示。 4. 新增 test/assimp-locate.spec.ts 13 项;强化「assimp 不存在」用例断言安装命令。 测试规模 12 文件 / 193 项。 5. 版本 0.2.2,README(.md/.txt)/DSH.md 同步(前置要求、FAQ、环境变量说明)。
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "opendance-admin",
|
||||
"private": true,
|
||||
"version": "0.2.1",
|
||||
"version": "0.2.2",
|
||||
"type": "module",
|
||||
"description": "OpenDance Studio 管理端(React + TypeScript + Vite)",
|
||||
"scripts": {
|
||||
|
||||
@@ -273,12 +273,21 @@ export interface HealthDatabase {
|
||||
migrationsPending?: number;
|
||||
}
|
||||
|
||||
export interface HealthAssimp {
|
||||
available: boolean;
|
||||
/** 解析到的 Assimp 可执行文件路径 */
|
||||
path?: string;
|
||||
version?: string;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface Health {
|
||||
status: 'ok' | 'degraded';
|
||||
uptimeSec: number;
|
||||
version: string;
|
||||
contractVersion: Record<string, string>;
|
||||
database: HealthDatabase;
|
||||
assimp?: HealthAssimp;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ 错误响应 */
|
||||
|
||||
@@ -196,10 +196,28 @@ export function DashboardPage() {
|
||||
<span className="muted">迁移待执行</span>
|
||||
<code>{healthValue.database?.migrationsPending ?? 0}</code>
|
||||
</div>
|
||||
<div className="kv">
|
||||
<span className="muted">assimp</span>
|
||||
<code>
|
||||
{healthValue.assimp?.available
|
||||
? (healthValue.assimp.version ?? 'available')
|
||||
: '未安装'}
|
||||
</code>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<ErrorBox message={health.error ?? '无法获取健康状态'} onRetry={state.reload} />
|
||||
)}
|
||||
{health.ok && healthValue && !healthValue.assimp?.available ? (
|
||||
<div className="banner banner-warn" role="status">
|
||||
<strong>Assimp 不可用</strong>
|
||||
<span>
|
||||
上传 .pmx / .fbx 模型(或含 PMX/FBX 的压缩包)会转换失败;FBX / glTF 动作预处理同样
|
||||
需要它。在服务器上安装后无需重启服务:<code>apt-get install -y assimp-utils</code>
|
||||
(RHEL 系为 <code>dnf install -y assimp</code>)。只上传 .glb / .vrm 则不受影响。
|
||||
</span>
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user