在中国做软件开发,往往需要特殊的技能,这点非常麻烦。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国内镜像除了清华大学镜像站以外还有其它公共镜像资源也都提供,根据实际网速测试选择合适的即可