在Windows10中使用rust的diesel库

news/2024/12/24 7:07:48/文章来源:https://www.cnblogs.com/spanner/p/18420461

介绍

最近在学习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_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文件,在文件中加入如下内容

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操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易优eyoucms网站无法安装,数据库文件版本号(无)与CMS源码版本号(v1.3.1)不一致,点击查看!

解决方法比较简单, 可以找历史版本, 使用同版本数据库或者源码进行安装, 安装完成后操作升级。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处…

易优eyoucms网站添加自定义新建字段的时候报错

根据提供的错误信息 SQLSTATE[42000]: Syntax error or access violation: 1118 Row size too large. The maximum row size for the used table type not counting BLOBs is 65535. You have to change some columns to TEXT or BLOBs,这个错误表明数据库表的行大小超过了 My…

易优eyoucms网站下载的系统导入就数据库出问题了,如何升级数据库?

数据库版本需要一样 数据库有新建模型的 需要打补丁包再导入扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、…

易优eyoucms网站登录报错:Array and string offset access syntax with curly braces is deprecated

根据提供的错误信息 Array and string offset access syntax with curly braces is deprecated,这个错误提示表明当前使用的 PHP 版本不支持使用大括号 {} 来访问数组和字符串偏移量。这种语法在 PHP 7.4 之后被标记为已弃用。 以下是一些可能的解决步骤: 1. 切换 PHP 版本 尝…

易优eyoucms网站报错,\\core\\library\\think\\db\\Connection.php

报错 \\\\core\\\\library\\\\think\\\\db\\\\Connection.php 第 380 行左右 数据表或视图不存在,请联系技术处理。[错误代码] SQLSTATE[42S02]: Base table or view not found: 1146 Table eyoucms.ey_channeltype doesnt exist 根据提供的错误信息 SQLSTATE[42S02]: Base ta…

高等数学 3.3 泰勒公式

泰勒(Taylor)中值定理1 如果函数 \(f(x)\) 在 \(x_0\) 处具有 \(n\) 阶导数,那么存在 \(x_0\) 的一个邻域,对于该领域内的任一 \(x\) ,有 \[f(x) = f(x_0) + f^{}(x_0)(x - x_0) + \cfrac{f^{}(x_0)}{2!}(x - x_0)^2 + \cdots + \cfrac{f^{(n)}(x_0)}{n!}(x - x_0)^n + R_…

腾讯云TDSQL数据库认证值得考吗?来看看TDSQL证书有什么用

国内市场上的数据库产品有不少,很多大企业都有自己的数据库产品,比如金仓的KingBase、华为的OpenGauss、阿里云的PolarDB、达梦DM数据库等等,腾讯云也有自己的数据库产品,叫做TDSQL数据库,TDSQL数据库有两个分支:基于MySQL版 + 基于PostgreSQL版。腾讯云是国内知名的云平…

Maximum execution time of 30 seconds exceeded

遇到 Maximum execution time of 30 seconds exceeded 这个错误,通常是因为 PHP 脚本执行时间超过了设定的最大执行时间限制。这可能是由于脚本执行了耗时的操作,例如长时间的数据库查询或其他资源密集型任务。 以下是一些解决步骤: 1. 增加最大执行时间限制 可以在 PHP 配置…

易优eyoucms网站报错 \core\library\think\db\Connection.php 第 307 行左右,SQLSTATE[HY000] [1045]访问被拒,这样的情况要怎么处理啊

根据提供的错误信息 SQLSTATE[HY000] [1045] Access denied for user cs2021@localhost (using password: YES),这个错误表明数据库访问被拒绝了,通常是因为用户名或密码不正确导致的。 以下是几个可能的解决步骤:检查数据库连接配置:确认数据库连接配置文件中的用户名和密…

如何用Python将HTTP接口封装成可视化页面。

在软件行业中,经常会遇到有一些功能只能通过接口触发,没有页面。这样很不方便,。 我们这里,就是通过PyQt5实现,将接口的入参,封装成一个可视化的表单。将用户在表单中填写的数据,传给接口,接口再带参请求业务1.先看最终的效果,用户打开桌面应用后,只会出现下面的弹窗…

易优eyoucms网站php5.4版本,报错:Cant use method return value in write context

当你在使用 PHP 5.4 版本时遇到 “Cant use method return value in write context” 的错误,这通常是因为你在代码中错误地使用了方法返回值。这种错误通常发生在试图将方法返回值直接赋值给变量或用于其他上下文时。 解决方案 以下是一些常见的原因和解决方法: 1. 检查代码…

易优eyoucms网站报错 /core/library/think/db/Connection.php 第 389 行左右,如何解决?

SQLSTATE[42S22]: Column not found: 1054 Unknown column groupid in where clause 遇到“SQLSTATE[42S22]: Column not found: 1054 Unknown column groupid in where clause”这类错误,通常是因为数据库表结构与代码中的查询不匹配。具体来说,可能是数据库表中缺少某个列(…