3个版本 (1个稳定版)
2024.5.12 | 2024年5月13日 |
---|---|
0.7.0 | 2022年5月21日 |
0.6.2 | 2022年5月5日 |
0.0.9 |
|
在数据库接口中排名第136
每月下载量32次
用于deepwell-rpc
2MB
35K SLoC
DEEPWELL
DEEPWELL是提供Wikijump核心维基操作的内联后端系统。这旨在作为Web服务器逻辑任务的一部分的内部API,因此验证调用用户是否有权限执行给定任务是Web服务器的职责。DEEPWELL将假设所有请求都是可信的并执行它们。
设置了lint #![forbid(unsafe_code)]
,因此这个crate只有安全代码。
在GNU Affero通用公共许可证的条款下提供。见LICENSE.md。
开发
如果您已安装sea-orm-cli
,并且有一个本地运行的Wikijump实例,您可以使用以下脚本来自动生成SeaORM模型文件
$ scripts/generate-models.sh
结构
crate的主要组织结构如下
api/
— Web服务器定义,例如其路由和相关结构。- 为Framerail公开内部API。
endpoints/
— 对上述单个端点的实现。services/
— "服务",或不同概念或操作的逻辑封装。- 例如,
ParentService
允许检索和存储与父子页面关系相关的数据。您可以将其视为“包装”page_parent
表。 - 同样,
PageService
封装了page
表,同时也包装了所有其他包含在“页面”逻辑概念中的操作,例如使用RevisionService
作为“编辑”方法的一部分来创建新修订版本。 - 结构定义按服务组织,此处可找到。例如,用作请求主体的结构很可能也在此定义。一些特定于路由的结构在这里直接定义。
- 例如,
locales/
— 提供本地化方法,解释 Fluent 翻译文件。models/
— 主要由 Sea-ORM 自动生成,这些文件允许与数据库接口。utils/
— 后端范围的实用工具和其他工具,分为几个部分。web/
— 对于一些枚举、结构和其他在应用程序中使用的概念,通常与以某种方式与 Web API 接口相关。- 其他模块是实用工具,通常通过查看其内容即可理解。
路由定义在 api/
中,它们的实现位于 methods/
中,它们依赖的结构位于 services/<name>/structs.rs
中。封装逻辑操作的调用服务位于 services/<name>.rs
或 services/<name>/service.rs
中。
编译
此可执行文件针对最新稳定的 Rust。在编写本文时,这是 1.77.0
。
目前该包有一个功能
notify
— 启用跟踪本地化目录和配置文件的功能,如果它们被修改则重新加载服务器。这应在本地构建中使用,而不是在生产环境中使用。
$ cargo build [--features ...] [--release]
执行
$ cargo build --features <deploy|local> -- [-q] [-p <port>] <config-file>
除了显示的参数之外,还有许多其他参数。运行 --help
获取所有相关信息。
这将使用给定的配置文件运行 DEEPWELL 的本地实例。在调试(即仅在 --features local
时)的情况下,您还可以传递 -
或 --watch-files
以在配置文件或任何本地化文件更改时自动重新启动进程。
这似乎不与 Docker 一起工作,因此您应该手动停止 api
容器,并使用标志在本地运行它。这样将正确监视更改并重新启动自身。
测试
尚未实现测试,但实现后,运行
$ cargo test
如果您想查看测试输出,请将 -----nocapture
添加到末尾。
代码风格检查
$ cargo fmt # Ensure code is formatted
$ cargo clippy # Check code for lints
数据库
与数据库管理(可以说 DEEPWELL “拥有”)相关的有两个重要目录。它们都是相当直白的
migrations/
— 一系列 SQL 文件,用于为新数据库设置模式。seeder/
— 初始化新实例所需的数据。- 这不是迁移系统的一部分,而是使用 DEEPWELL 服务和方法确保所有不变量都得到正确设置,而不是需要在迁移文件中以原始行形式手动提供。
- 这也使得修改实例的初始状态变得更加容易,因为只需编辑默认的起始页面,就只需要编辑一个常规文本文件。
迁移和种子运行是否在启动时由配置控制。这意味着它们可以通过以下方式设置:
RUN_MIGRATIONS
环境变量,或者--run-migrations
命令行标志。RUN_SEEDER
环境变量,或者--run-seeder
命令行标志。
对于本地安装,这两个都默认启用。
基本数据库设置(创建wikijump
数据库和用户)是在构建容器时完成的。请参阅/install/files/postgres/init/
。
添加新的迁移
数据库迁移是通过使用sqlx
迁移来应用的,这可以在migrations/
目录中看到简单的结构。可以通过使用sqlx
命令行实用工具添加新的迁移
$ sqlx migrate add [name_of_migration]
迁移名称应该是全小写,snake_case
,并且限制为1-3个单词。
请注意,由于Wikijump还没有生产部署,迁移正在被压缩以简化数据库系统。增量迁移是必要的,以避免破坏生产环境,但在存在之前,没有必要进行拆分所有更改的额外工作。
您可以查看sqlx migrate --help
或sqlx-cli
以获取更多信息。
依赖项
~68–105MB
~2M SLoC