使用 vscode 连接云端 rust 容器时,无法下载依赖

642 阅读2分钟

报错信息:

2024-03-16T11:37:20.883550Z ERROR rust_analyzer::main_loop: FetchWorkspaceError:
rust-analyzer failed to load workspace: Failed to load the project at /workspaces/rust/variables/Cargo.toml: Failed to read Cargo metadata from Cargo.toml file /workspaces/rust/variables/Cargo.toml, Some(Version { major: 1, minor: 75, patch: 0 }): Failed to run `cd "/workspaces/rust/variables" && RUSTUP_TOOLCHAIN="/usr/local/rustup/toolchains/1.75.0-x86_64-unknown-linux-gnu" "/usr/local/cargo/bin/cargo" "metadata" "--format-version" "1" "--manifest-path" "/workspaces/rust/variables/Cargo.toml" "--filter-platform" "x86_64-unknown-linux-gnu"`: `cargo metadata` exited with an error:     Updating crates.io index
warning: spurious network error (3 tries remaining): [7] Couldn't connect to server (Failed to connect to 127.0.0.1 port 7890 after 0 ms: Couldn't connect to server)
warning: spurious network error (2 tries remaining): [7] Couldn't connect to server (Failed to connect to 127.0.0.1 port 7890 after 0 ms: Couldn't connect to server)
warning: spurious network error (1 tries remaining): [7] Couldn't connect to server (Failed to connect to 127.0.0.1 port 7890 after 0 ms: Couldn't connect to server)
error: failed to get `num` as a dependency of package `variables v0.1.0 (/workspaces/rust/variables)`

Caused by:
  failed to query replaced source registry `crates-io`

Caused by:
  download of config.json failed

Caused by:
  failed to download from `https://index.crates.io/config.json`

Caused by:
  [7] Couldn't connect to server (Failed to connect to 127.0.0.1 port 7890 after 0 ms: Couldn't connect to server)

尝试过的解决方案:

  • 配置 ~/cargo/config.toml,但无效。

解决方案无效原因:用户目录中的配置文件优先级是最低的,cargo 的配置文件搜索算法和 git 类似。搜索顺序自上而下:

  • /projects/foo/bar/baz/.cargo/config
  • /projects/foo/bar/.cargo/config
  • /projects/foo/.cargo/config
  • /projects/.cargo/config
  • /.cargo/config
  • $HOME/.cargo/config

参考自:设置 - Cargo 手册 中文版 (rustwiki.org)

最终解决方案

可以直接在项目根目录下创建 .cargo/config.toml,然后写入以下内容来取消代理:

[http]
proxy = ""

注意事项:

  • 不需要配置国内镜像,原因是容器所在服务器所使用的网络并不是国内的网络。
  • 如果发现可以下载依赖了,但 Cargo.toml 中还是报错,那么可能是因为本地的 http.proxy 依旧在生效。而 rust-analyzer 会读取该配置。