Rust配置crates.io国内镜像,加速依赖更新

在中国做软件开发,往往需要特殊的技能,这点非常麻烦。crates.io经常因为网络问题会卡在

$ cargo update
  Updating crates.io index

幸运的话可以通过,最头疼的是等了相当长的时间过后因为网络问题的终止,解决这个问题可以配置crates.io国内镜像,这里以清华大学开源软件镜像站做例子,编辑~/.cargo/config文件,添加以下内容

[source.crates-io]
replace-with = 'tuna'

[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

这个时候在回来执行cargo update,Cargo项目会从已配置在~/.cargo/config里的registry下载依赖包了。

$ cargo update
  Updating `https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git` index

速度要比crates.io快不少。但这个方式在做容器化编译时因为容器化内环境缺少crates.io源配置,导致容器内下载依赖仍然会从默认的crates.io下载

Dockerfile

FROM rust:1.49 as builder
WORKDIR /usr/src/myapp
COPY . .
RUN cargo install --path .

FROM debian:buster-slim
RUN apt-get update && apt-get install -y extra-runtime-dependencies && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/cargo/bin/myapp /usr/local/bin/myapp
CMD ["myapp"]

解决方案是直接在Cargo项目根目录下创建.cargo/config.toml文件,添加原~/.cargo/config文件里的内容即可,也就是把原来全局配置的~/.cargo/config搬Cargo项目里,config改名config.toml

$ tree
.
|-- .cargo
|   `-- config.toml
|-- .gitignore
|-- Cargo.lock
|-- Cargo.toml
`-- src
    `-- main.rs

crates.io国内镜像除了清华大学镜像站以外还有其它公共镜像资源也都提供,根据实际网速测试选择合适的即可

分享

TITLE: Rust配置crates.io国内镜像,加速依赖更新

LINK: https://www.qttc.net/542-rust-source-crates-io-configuration.html

NOTE: 原创内容,转载请注明出自琼台博客