安装
Prisma Client Rust 的安装方式与大多数 Rust 项目不同。
prisma-client-rust
包含查询构建器、特征和类型定义。其中一些 - 例如 Direction
- 可以在您自己的代码中使用。
prisma-client-rust-cli
包含 Prisma 生成器和对 Prisma CLI 的访问,但没有提供可执行二进制文件 - 这必须由您自己创建。
Prisma Client Rust 需要最低 Rust 版本 v1.62.0。
创建 CLI 二进制文件
在您的板条箱内部
首先,主库和 CLI 包必须添加到您项目的 Cargo.toml 中
[dependencies]
prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.11" }
prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.11" }
生成的客户端将需要 serde
,因此运行 cargo add
来安装它
cargo add serde
您还需要确保您使用的是 Rust 的 2021 版。
[package]
# ... package stuff
edition = "2021"
创建二进制文件以访问 CLI 的最简单方法是,如果您还没有,创建一个 src/bin
文件夹,并在其中创建一个名为 prisma.rs
的文件(这将确定您的二进制文件名称)。在此文件中放入以下内容
fn main() {
prisma_client_rust_cli::run();
}
从技术上讲,这就是所需的全部!只需运行以下命令即可访问 CLI
$ cargo run --bin <prisma binary name> -- <command>
如果使用 Apple Silicon,建议确保已安装 Rosetta,**即使您之前已安装过**。运行 softwareupdate --install-rosetta --agree-to-license
来安装它。否则可能会导致 Prisma 的 query-engine
二进制文件出现难以描述的错误。
但这并不是一个非常友好的命令。幸运的是,Cargo 允许我们为运行命令定义项目范围的别名!在项目的根目录下创建一个名为 .cargo
的文件夹,并在其中创建一个名为 config.toml
的文件,其中包含以下内容
[alias]
prisma = "run --bin <prisma binary name> --"
现在,您可以在项目的任何位置运行 cargo prisma <command>
来访问 CLI!
但是,这种方法存在一些问题
prisma-client-rust-cli
作为板条箱中的依赖项包含在内,这可能是不希望的。- 如果您的板条箱在编译期间出现错误,则您将无法生成客户端,因为 CLI 也会无法编译!
谢天谢地,有一种更可靠的方法
作为工作区板条箱
将 CLI 二进制文件移动到一个单独的板条箱,并配置您的项目以使用 Cargo 工作区 (在新标签页中打开)。以下是一个示例项目结构,其中在 src/main.rs
中有一个二进制目标,以及一个名为 prisma-cli
的单独 CLI 板条箱,该板条箱包含在 Cargo.toml
的工作区成员中。
Cargo.toml
.cargo/
config.toml
src/
main.rs
prisma-cli/
Cargo.toml
src/
main.rs
对于上面的示例,Cargo.toml
将包含 prisma-client-rust
作为依赖项,因为它是由生成的文件所需的,而 prisma-cli/Cargo.toml
将包含 prisma-client-rust-cli
作为依赖项,因此 src/main.rs
中的二进制文件不会与所有 CLI 代码捆绑在一起,而只会与所需的库代码捆绑在一起。
您还需要更新 cargo prisma
别名以运行新的板条箱
[alias]
prisma = "run -p <prisma crate name> --"
关于虚拟工作区的说明
如果工作区的根 Cargo.toml
没有 [package]
部分(只有 [workspace]
部分),那么您正在使用虚拟工作区。
为了使 Prisma Client Rust 正确编译,您需要指示 Cargo 使用版本 2 的 功能解析器 (在新标签页中打开)。
[workspace]
# ... workspace stuff
resolver = "2"
对于常规工作区和单个包来说,这没有必要,因为它们可以使用edition = "2021"
,但虚拟工作区由于某些原因比较特殊。
指定您的数据库
从 0.6.3 版本开始,Prisma Client Rust 允许您精确指定项目使用的数据库连接器,以避免编译 Prisma 支持的其他连接器。这减少了编译时间和二进制文件大小。
首先,为 prisma-client-rust
和 prisma-client-rust-cli
都设置 default-features = false
。然后,将您想要支持的每个数据库作为这两个板条箱的功能添加。可能的值为 postgresql
、mysql
、sqlite
、mssql
和 mongodb
。
为什么不提供 CLI 二进制文件?
在旧版本的 Prisma Client Rust 中,可以 cargo install prisma-client-rust-cli
并全局安装 CLI 以随时使用。但这存在一个主要问题:版本控制。管理使用不同版本的 Prisma Client Rust 的多个项目很快就会变得非常烦人,而且违反了 Prisma Client 的推荐安装说明 JS (在新标签页中打开)、Go (在新标签页中打开) 和 Python (在新标签页中打开)。
与这三种语言不同,Rust(或更具体地说 Cargo)不提供执行依赖项中可用二进制文件的方法。由于排除了全局安装二进制文件,因此将 CLI 作为库提供被视为唯一其他选项,而且我个人认为能够运行 cargo prisma <command>
是一种非常好的体验,并且与其他语言的客户端相匹配。