Skip to content

本地部署后“新增挂载点”流程存在多处问题:选择框异常、前后端字段不一致、WebDAV 初始化失败并可能触发 OOM #13

@musicleaf

Description

@musicleaf

hello OpenlistTeam:
因为想试试看serverless版本做得怎么样所以让ai帮忙本地部署了一下,发现问题蛮多的,以下是AI提的issue,请见谅

你好,我在本地部署并排查这个项目时,围绕“新增挂载点”流程遇到了一系列问题。
以下内容尽量基于源码和实际日志整理,不依赖 README。

一、环境与前置情况

我本地是在 Windows 环境下跑的,前端和 Worker/API 分别启动。
项目可以基本跑起来,管理后台也能进入,但“新增挂载点”流程问题较多。


二、初始化与部署阶段的问题

  1. wrangler.jsonc 是模板配置,不能直接运行

仓库内的 wrangler.jsonc 中包含未填写的占位项,例如:

kv_namespaces[].id = ""

d1_databases[].database_name = ""

d1_databases[].database_id = ""

在这种状态下,Wrangler 会先做配置校验并直接报错,无法正常继续。

  1. 静态资源目录依赖前置构建

wrangler.jsonc 里配置了:

"assets": {
"directory": "./public",
"binding": "ASSETS"
}

但初次运行时 public 目录并不存在,导致 wrangler dev 直接报错。
也就是说,前端资源需要先构建出来,否则 Worker 端无法正常启动。

  1. D1 不会自动建表

项目启动后,请求部分后台接口时会直接报:

no such table: users

说明数据库表结构不会自动初始化,必须手动执行 schema.sql。
这一点对首次部署影响较大。

  1. 首次管理员初始化不是自动完成的

根据源码,管理员账号是通过初始化接口创建的,不是自动生成。
如果没有主动执行初始化流程,即使项目跑起来,也无法直接正常登录使用。


三、管理后台“新增挂载点”页面的问题

主要问题集中在 pages/src/pages/Admin/MountManagement.tsx 对应页面。

  1. “新增挂载点”弹窗中的多个选择框无法正常使用

我在“新增挂载点”中遇到以下下拉项异常:

驱动类型

代理模式

状态

WebDAV 下的服务商类型

现象包括:

无法展开

点击后抖动

点击后弹窗关闭

看似有值,但无法真正切换

从源码看,这几个字段本身并不是都被业务逻辑故意禁用。
例如:

驱动类型只在编辑模式下禁用

状态没有写 disabled

代理模式仅在部分 proxy_only 驱动下禁用

所以更像是 Modal + antd Select + 内部滚动容器 组合带来的交互问题,而不是单纯的业务限制。

  1. WebDAV 的“服务商类型”即使显示默认值,也可能提交出不符合预期的 vendor

在实际测试 WebDAV 时,前端页面显示的是类似“通用WebDAV”,但后端日志里实际拿到的是:

vendor: other

后续初始化时失败,说明前端显示和后端实际收到的数据之间,可能存在不一致或未正确映射的问题。


四、前后端字段定义不一致,导致新增挂载直接 400

现象

即使页面里已经选择了驱动类型并填写了挂载路径,后端依然返回:

mount_path 和 driver 不能为空

原因

排查发现,前端提交的数据结构与后端接口要求的不一致。

前端原本提交的是这类字段:

mount_type

drive_conf

cache_time

is_enabled

proxy_mode

但后端创建挂载接口实际要求的是:

driver

addition

cache_expiration

disabled

web_proxy

因此即使前端已经选了驱动,后端依然会认为 driver 为空。

这属于明显的前后端契约不一致问题。


五、WebDAV 实际挂载时的错误

在驱动类型选择为 WebDAV,地址填写为坚果云 WebDAV 地址后,后端日志出现:

WebDAV error: 404 Not Found
ObjectNotFound
One of this location does not exist

日志中能看到类似信息:

vendor: other
address: https://dav.jianguoyun.com/dav/

这说明当前项目是按“通用 WebDAV / other vendor”的逻辑在初始化该地址,而不是按坚果云兼容逻辑处理。
在这种情况下,WebDAV 初始化失败。


六、WebDAV 初始化失败后还可能触发 OOM

在 WebDAV 初始化失败之后,后端还出现了:

JavaScript heap out of memory

这看起来不像第一原因,而更像是:

初始化失败后某段异常处理/重复处理逻辑没有收住

最后把 Node / Worker 运行环境内存打满

也就是说,这里不仅有 WebDAV 初始化失败问题,还可能有失败场景下的资源释放或异常处理问题。


七、目前总结

从本地实际部署和调试来看,这个项目至少存在以下问题:

  1. wrangler.jsonc 作为模板存在未填写占位项,不能直接运行

  2. 前端资源和数据库都需要额外手动初始化,缺少更顺滑的首次运行流程

  3. “新增挂载点”页面中多个选择框存在明显交互问题

  4. 新增挂载时前后端字段定义不一致,直接导致 400

  5. WebDAV 在服务商类型 / vendor 映射上可能有问题

  6. WebDAV 初始化失败后,后端还可能继续触发 OOM


八、期望

希望能确认并修复以下问题:

统一“新增挂载点”前后端字段定义

修复管理后台新增挂载弹窗中的选择组件交互

明确 WebDAV 服务商类型与后端 vendor 的映射关系

优化 WebDAV 初始化失败后的异常处理,避免进一步 OOM

补充更明确的首次运行初始化说明,或者考虑自动化部分初始化流程


如果需要,我也可以继续补充:

具体复现步骤

关键报错截图

对应源码位置

我本地修改过的临时绕过方案


你要是愿意,我还能顺手再给你写一个更像 GitHub issue 风格的精简版,更短、更适合直接贴。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions