Rocket 每晚需要最低版本的 Rust,但已经安装了更高的稳定版本

Posted

技术标签:

【中文标题】Rocket 每晚需要最低版本的 Rust,但已经安装了更高的稳定版本【英文标题】:Rocket requires a minimum version of Rust nightly, but a higher stable version is already installed 【发布时间】:2019-08-09 09:12:57 【问题描述】:

我正在尝试运行Rocket,但我遇到了第一个障碍。尝试cargo run 时,出现以下错误:

error: failed to run custom build command for `pear_codegen v0.1.2`
Error: Pear requires a nightly or dev version of Rust.
Installed version is: 1.33.0 (2019-02-28). Minimum required: 1.31.0-nightly (2018-10-05).

我是 Rust 的新手,但来自其他语言这毫无意义。它至少需要 1.31.0 版本,但我安装了 1.33.0 版本。

我做错了什么?

【问题讨论】:

它声称需要一个nightly 版本的编译器。您的1.33.0 只是一个稳定版本。 rustup toolchain add nightly @E_net4 是的,我切换到 nightly 并且它有效。看起来很奇怪,稳定的 1.33.0 不能与几乎 1.31.0 一起工作,我原以为 1.31.0 的夜间代码一旦测试就会被推入稳定的 1.31.0+ 版本等 > 一次测试等 确切地说 - 每晚的功能只有在经过稳定化过程后才能在稳定的编译器版本中使用,这可能需要很多时间,而且当然没有明确定义的发布节奏他们都是。一些夜间功能可能会被彻底删除。 > 稳定的 1.33.0 不能与几乎是 1.31.0 的版本一起工作似乎很奇怪并以比 6 周发布周期更长的节奏进行测试。而且由于稳定版本明确禁止使用所有夜间功能(仅限稳定功能),这就是您仍然需要夜间功能的原因。 @U007D 很公平,只是我不了解它的发布周期 【参考方案1】:

如果软件需要每晚构建 Rust,则无法替代稳定版本的 Rust:需要使用每晚。

Rust 的 nightly 频道是稳定版 Rust 的超集。尚未完成或根本没有证明其价值的功能包含在 Rust 的夜间构建中。您可以通过crate attribute 选择使用给定功能。

这些不稳定的功能随时可能完全改变甚至被删除。换句话说,一个不稳定的特性从不保证存在于任何特定的 Rust 稳定版本中。

如果有帮助,您可以将夜间版本视为“替代现实”的发展轨迹。 nightly 的版本号只是它们及时存在的一个松散指标;编译日期和 git commit hash 信息量更大。

我原以为 1.31.0 的夜间代码一旦测试就会被推送到稳定的 1.31.0+ 版本中

beta 频道就是这样工作的——1.x.y-beta 中的任何东西都将处于 1.x.y-stable 中(假设没有发生重大紧急情况)。

另见:

What is the stabilization process? error[E0554]: #![feature] may not be used on the stable release channel Couldn't install racer using cargo What is a crate attribute and where do I add it?

【讨论】:

我想知道是否应该将 nightly 重命名为 experimental 以使事情更清晰。 @MatthieuM。在SemVer 意义上,x.y.zx.y.z-betax.y.z-nightly 彼此没有关系。 (预发布版本表示该版本不稳定,可能无法满足相关正常版本所表示的预期兼容性要求)。虽然“实验性”可能是一个更好的名称,但我怀疑现在进行任何此类更改会超过更改的成本。 ¯_(ツ)_/¯ 你失去了一条手臂:\。我同意它可能不值得改变。【参考方案2】:

您没有做错任何事情,Rocket 只需要 Nightly 构建,因此它可以访问可能尚未稳定的 Rust 的新功能。

根据the documentation,您可以选择仅对 Rocket 项目使用 Nightly 构建:

rustup override set nightly

Getting started guide

【讨论】:

以上是关于Rocket 每晚需要最低版本的 Rust,但已经安装了更高的稳定版本的主要内容,如果未能解决你的问题,请参考以下文章

Rust 的 Rocket Web 框架如何使用共享变量?

Rust - 无法从 Rocket State 访问 r2d2 池连接

rust配置要求

如何设置(Rust)Rocket API 端点的模板响应的 HTTP 状态代码?

diesel.rs 和rocket.rs:不明白为啥它需要一个数据库表

什么是Rust“工具链”?