安装最新的 rust nightly 抱怨缺少 rls 组件

Chu*_*uck 11 nightly-build rust rust-language-server rust-rocket

尝试编译:https://github.com/SergioBenitez/Rocket/tree/master/examples/hello

Cargo.toml

[dependencies]
rocket = "0.4.10"
Run Code Online (Sandbox Code Playgroud)

抱怨我每晚都需要 Rust

$ cargo build
...
  Error: Rocket (core) requires a more recent version of rustc.
  Installed version: 1.54.0 (2021-05-17)
  Minimum required:  1.54.0-nightly (2021-05-18)
Run Code Online (Sandbox Code Playgroud)

我已经完成了本地目录覆盖

$ rustup override set nightly
Run Code Online (Sandbox Code Playgroud)

我每晚运行 2021-05-17 但我需要 2021-05-18

$ rustup show
...
active toolchain
----------------

nightly-x86_64-unknown-linux-gnu (directory override for '/<redacted>')
rustc 1.54.0-nightly (3e99439f4 2021-05-17)
Run Code Online (Sandbox Code Playgroud)

我尝试了各种命令来获取更新的每晚

$ rustup update
$ rustup update nightly
$ rustup toolchain install nightly-2021-05-18
Run Code Online (Sandbox Code Playgroud)

当我这样做的时候,会发生一些奇怪的事情rustup update nightly

$ rustup update nightly 
info: syncing channel updates for 'nightly-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-23, rust version 1.54.0-nightly (e4ca1662f 2021-05-22)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-22-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-22, rust version 1.54.0-nightly (5dc8789e3 2021-05-21)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-21-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-21, rust version 1.54.0-nightly (40d230204 2021-05-20)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-20-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-20, rust version 1.54.0-nightly (f94942d84 2021-05-19)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-19-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-19, rust version 1.54.0-nightly (4e3e6db01 2021-05-18)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-18-x86_64-unknown-linux-gnu'

  nightly-x86_64-unknown-linux-gnu unchanged - rustc 1.54.0-nightly (3e99439f4 2021-05-17)
Run Code Online (Sandbox Code Playgroud)

投诉skipping nightly which is missing installed component 'rls'但我不知道如何解决这个问题

任何帮助,将不胜感激

sk_*_*ant 9

抱歉,文字墙很长,如果您只想快速解决问题,请参阅下面的问题解决方案。您还可以查看rustup 一书,它包含有关此类问题的信息。

\n
\n

您正在尝试安装 Rust 的夜间版本。在 nightly 版本中,Rust 的非必要组件(例如Rust Language Server(或简称rls))的可用性无法得到保证 \xe2\x80\x93 如果它们无法构建,则 nightly 版本不会包含它们。您可以在这里看到,这rls确实不是最近几晚的一部分。每晚发布的最后一天rls2021-05-18,这是前一天构建的,所以2021-05-17(有点令人恼火,但这似乎是可以接受的行为)。

\n

您的 rustup 安装似乎已配置为包含rls. 因此,当您要求rustup更新nightly工具链时,rustup 会选择包含rls. 没有比您当前安装的更新的 Nightlies nightly-2021-05-17,因此rustup不会更新工具链。

\n

解决您的问题

\n
    \n
  • 如果您不需要rls(只有 IDE 中的自动完成和类似功能才需要),您的问题有多种解决方案:\n
      \n
    • rls您可以从夜间工具链中删除该组件:rustup component remove --toolchain nightly rls
    • \n
    • rustup 书中还有一些更多的解决方案:\n
      \n

      如果[先前安装的组件]丢失,rustup 将自动搜索包含所需组件的旧版本。有几种方法可以改变这种行为:

      \n
        \n
      • 使用 --force 标志来 rustup 工具链安装,以强制它安装最新版本,即使缺少组件也是如此。
      • \n
      • 使用 --profile 标志来 rustup 工具链安装,以使用不包含缺少组件的不同配置文件。例如,--profile=minimal 应该始终有效,因为最小集需要存在。有关更多详细信息,请参阅配置文件一章。
      • \n
      • 安装包含您需要的组件的特定日期。例如,rustup 工具链 install nightly-2020-07-27。然后,您可以使用覆盖来固定到该特定版本。
      • \n
      \n
      \n
    • \n
    \n
  • \n
  • 如果您确实需要rls,那么您的处境就有点紧张了。您可能希望为您的项目使用覆盖,实际上使用不同的 Rust 版本来构建代码和运行rls. 但是,这可能不起作用 \xe2\x80\x93rls可能需要构建项目依赖项以进行自动完成,而 Rocket 不允许使用较旧的 nightly。对于这种情况,我确实没有解决方案 \xe2\x80\x93 您可能需要保留旧版本的 Rocket 或rls暂时停止使用,直到再次推出更新的 Rust nightly rls
  • \n
\n