无法在 Rust/Actix 应用程序中使用带有柴油的计时功能

Posted

技术标签:

【中文标题】无法在 Rust/Actix 应用程序中使用带有柴油的计时功能【英文标题】:Unable to use chrono feature with diesel in Rust/Actix application 【发布时间】:2021-01-20 01:02:23 【问题描述】:

我还是 Rust 的新手。

我尝试在我的一些柴油车型中使用 NaiveDateTime。

因此,我尝试将 chrono 作为外部板条箱导入,如下所示:

src/db/models.rs

extern crate diesel;
extern crate chrono;

use diesel::sql_types;
use chrono;

// model implementations follow below ...

但是我得到一个生锈错误说:

can't find crate for `chrono`: can't find crate

chrono 被声明为柴油功能。我的 Cargo.toml 看起来像这样:

[package]
name = "backend"
version = "0.1.0"
authors = ["My Name <my@emai.l>"]
edition = "2018"

[dependencies]
actix-web="3"
diesel=  version = "1.4.5", features = ["mysql", "chrono"] 
dotenv=  version = "0.15.0" 

[[bin]]
name = "main"
path = "src/main.rs"

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

您需要自行安装chrono

[dependencies]
actix-web = "3"
chrono = "0.4"
diesel =  version = "1.4.5", features = ["mysql", "chrono"] 
dotenv =  version = "0.15.0" 

chrono 功能添加到diesel 只会使diesel 编译依赖于chrono 并粘合代码以集成它。但是,要在您自己的 crate 中使用chrono,您仍然需要在Cargo.toml 中声明它。

【讨论】:

但这不能成为版本冲突(即不一致)的根源吗?如果我在 Cargo.toml 中声明的计时版本与柴油作为功能安装的版本不同怎么办?有没有办法监控两个版本是否同步? @LongHike 可以,但可能不会。这完全是另一个话题,但如果两个依赖项是“semver compatible”(1.1 与 1.2),那么 cargo 将构建一个版本供两种使用。如果两个依赖项的版本不兼容(1.1 与 2.0),那么 cargo 将构建它们以独立使用。如果柴油更新到不兼容的 chrono 版本,当您使用它时,编译器会确保您知道存在问题。 监控重复我使用cargo tree -d

以上是关于无法在 Rust/Actix 应用程序中使用带有柴油的计时功能的主要内容,如果未能解决你的问题,请参考以下文章

柴没有到达 .end()

markdown 挑战05:使用摩卡柴进行测试

猪厂肥柴养成记

摩卡柴解决多个承诺

html 摩卡/柴锅炉

一招识狗!基于函数计算打造柴犬秋田鉴定器