无法在 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 应用程序中使用带有柴油的计时功能的主要内容,如果未能解决你的问题,请参考以下文章