介绍
最近在学习Actix Web时,需要用到数据库操作,简单尝试了一下diesel,也遇到了一些问题。在这里记录一下,供大家参考。
1.安装
根据Diesel官网介绍,使用cargo binstall安装diesel cli。
cargo binstall diesel_cli
如果报错 error: no such command: `binstall` 需要先安装cargo-binstall库,再安装diesel_cli
cargo install cargo-binstall
建议使用binstall安装,会根据系统找到正确的二进制文件。
2.项目中使用diesel
新建项目或者使用已有项目。
添加依赖
在Cargo.toml中,添加diesel依赖项
[dependencies]
diesel = { version = "2.2.4", features = ["mysql"] }
dotenvy = "0.15.7"
创建.env文件
在项目中,创建.env文件,并将数据库URL配置信息保存到文件中
DATABASE_URL=mysql://username:password@server_ip/database_name
配置好之后,执行diesel cli命令
diesel setup
此时大概率会遇到报错(忘记截图了),原因在diesel连接数据库时,找不到libmysqlclient。
如果此时,尝试执行cargo build
同样也会报错,报错原因是diesel这个crate的依赖mysqlclient-sys build失败,查看失败日志,同样是由于找不到libmysqlclient。
安装libmysqlclient
通过github上mysqlclient-sys的README中的描述,通过vcpkg命令安装libmysqlclient
vcpkg install libmysql:x64-windows-static-md
安装后查看已安装的内容,已安装好mysqlclient的lib文件
此时执行diesel setup
不再报错,但是cargo build
还会报错仍然是找不到libmysqlclient,原因是由于在cargo build
时,需要指定mysqlclient.lib的位置。在环境变量中配置MYSQLCLIENT_LIB_DIR和MYSQLCLIENT_VERSION。
配置完环境变量后,不再报找不到libmysqlclient库,出现的新的问题。如:
error LNK2019: 无法解析的外部符号 __imp_CertOpenStore,函数 capi_open_store 中引用了该符号
熟悉C++的朋友对这些报错肯定不陌生,是比较常见的链接错误,在Visual Studio中可以通过项目配置附加依赖项解决。
在rust的build过程报错,同样需要在rust项目中进行配置。
通过缺少的依赖,确定是win10 SDK中的lib,分别是Crypt32.lib和User32.lib,找到两个lib文件所在的目录(不同机器上版本号可能不同,替换自己即可)
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64
在项目中创建build.rs文件,在文件中加入如下内容
fn main() {println!("cargo:rustc-link-search=native=C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\um\\x64");println!("cargo:rustc-link-lib=crypt32");println!("cargo:rustc-link-lib=user32");
}
并在Cargo.toml文件的package中指定build.rs,如:
[package]
name = "diesel_demo"
version = "0.1.0"
edition = "2021"
build= "build.rs"
完成上述操作后,再次执行cargo build
,成功build。
总结
至此,win10操作系统中,在rust项目diesel crate操作数据库已调通。后续根据diesel官网的例子,可以进行CRUD操作。