在Windows10中使用rust的diesel库

打印 上一主题 下一主题

主题 551|帖子 551|积分 1653

介绍

最近在学习Actix Web时,需要用到数据库操作,简朴实验了一下diesel,也遇到了一些问题。在这里记录一下,供各人参考。
1.安装

根据Diesel官网介绍,使用cargo binstall安装diesel cli。
  1. cargo binstall diesel_cli
复制代码
如果报错 error: no such command:  `binstall` 需要先安装cargo-binstall库,再安装diesel_cli
  1. cargo install cargo-binstall
复制代码
发起使用binstall安装,会根据系统找到正确的二进制文件。
2.项目中使用diesel

新建项目或者使用已有项目。
添加依赖

在Cargo.toml中,添加diesel依赖项
  1. [dependencies]
  2. diesel = { version = "2.2.4", features = ["mysql"] }
  3. dotenvy = "0.15.7"
复制代码
创建.env文件

在项目中,创建.env文件,并将数据库URL设置信息保存到文件中
  1. DATABASE_URL=mysql://username:password@server_ip/database_name
复制代码
设置好之后,执行diesel cli命令
  1. diesel setup
复制代码
此时大概率会遇到报错(忘记截图了),原因在diesel连接数据库时,找不到libmysqlclient。
如果此时,实验执行cargo build同样也会报错,报错原因是diesel这个crate的依赖mysqlclient-sys build失败,查看失败日记,同样是由于找不到libmysqlclient。
安装libmysqlclient

通过github上mysqlclient-sys的README中的描述,通过vcpkg命令安装libmysqlclient
  1. vcpkg install libmysql:x64-windows-static-md
复制代码
安装后查看已安装的内容,已安装好mysqlclient的lib文件

此时执行diesel setup不再报错,但是cargo build还会报错仍然是找不到libmysqlclient,原因是由于在cargo build时,需要指定mysqlclient.lib的位置。在情况变量中设置MYSQLCLIENT_LIB_DIRMYSQLCLIENT_VERSION


设置完情况变量后,不再报找不到libmysqlclient库,出现的新的问题。如:
error LNK2019: 无法解析的外部符号 __imp_CertOpenStore,函数 capi_open_store 中引用了该符号

认识C++的朋侪对这些报错肯定不陌生,是比较常见的链接错误,在Visual Studio中可以通过项目设置附加依赖项办理。
在rust的build过程报错,同样需要在rust项目中进行设置。
通过缺少的依赖,确定是win10 SDK中的lib,分别是Crypt32.libUser32.lib,找到两个lib文件所在的目录(差别机器上版本号大概差别,替换自己即可)
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64
在项目中创建build.rs文件,在文件中加入如下内容
  1. fn main() {
  2.     println!("cargo:rustc-link-search=native=C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\um\\x64");
  3.     println!("cargo:rustc-link-lib=crypt32");
  4.     println!("cargo:rustc-link-lib=user32");
  5. }
复制代码
并在Cargo.toml文件的package中指定build.rs,如:
  1. [package]
  2. name = "diesel_demo"
  3. version = "0.1.0"
  4. edition = "2021"
  5. build= "build.rs"
复制代码
完成上述操作后,再次执行cargo build,乐成build。
总结

至此,win10操作系统中,在rust项目diesel crate操作数据库已调通。后续根据diesel官网的例子,可以进行CRUD操作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表