新增章节:下载缓慢解决办法

pull/743/head
sunface 3 years ago
parent 7af5364630
commit 175bf085e6

@ -16,6 +16,7 @@
- [墙推 VSCode!](first-try/editor.md)
- [认识 Cargo](first-try/cargo.md)
- [不仅仅是 Hello world](first-try/hello-world.md)
- [下载依赖很慢](first-try/slowly-downloading.md)
- [避免从入门到放弃](first-try/sth-you-should-not-do.md)
# Rust语言特性

@ -0,0 +1,89 @@
# 下载依赖很慢或卡住?
在目前,大家还不需要自己搭建的镜像下载服务,因此只需知道下载依赖库的地址是 [crates.io](https://crates.io),是由 Rust 官方搭建的镜像下载和管理服务。
但悲剧的是,它的默认镜像地址是在国外,这就导致了某些时候难免会遇到下载缓慢或者卡住的情况,下面我们一起来看看。
## 下载很慢
解决下载缓慢有两种方式:
1. 开启命令行或者全局翻墙
经常有同学反馈,我明明开启翻墙了,但是下载依然还是很慢,无论是命令行中下载还是 VSCode 的 rust-analyzer 插件自动拉取。
事实上,翻墙工具默认开启的仅仅是浏览器的翻墙代理,对于命令行或者软件中的访问,并不会代理流量,因此这些访问还是通过正常网络进行的,自然会失败。
因此,大家需要做的是在你使用的翻墙工具中 `复制终端代理命令` 或者开启全局翻墙。由于每个翻墙软件的使用方式不同,因此具体的还是需要自己研究下。以我使用的 `ClashX` 为例,点击 `复制终端代理命令` 后,会自动复制一些 `export` 文本,将这些文本复制到命令行终端中,执行一下,就可以自动完成代理了。
```shell
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891
```
2. 修改 Rust 的下载镜像为国内的镜像地址
这个效果最直接,但是就是稍有些麻烦。
为了使用 `crates.io` 之外的注册服务,我们需要对 `$HOME/.cargo/config.toml` ($CARGO_HOME 下) 文件进行配置,添加新的服务提供商,有两种方式可以实现:增加新的镜像地址和覆盖默认的镜像地址。
> 这里推荐使用[科大的注册服务](http://mirrors.ustc.edu.cn/help/crates.io-index.html)来提升下载速度,以下注册服务的链接都是科大的
#### 增加新的镜像地址
**首先是在 `crates.io` 之外添加新的注册服务**,在 `$HOME/.cargo/config.toml` 中添加以下内容:
```toml
[registries]
ustc = { index = "https://mirrors.ustc.edu.cn/crates.io-index/" }
```
这种方式只会新增一个新的镜像地址,因此在引入依赖的时候,需要指定该地址,例如在项目中引入 `time` 包,你需要在 `Cargo.toml` 中使用以下方式引入:
```toml
[dependencies]
time = { registry = "ustc" }
```
**在重新配置后,初次构建可能要较久的时间**,因为要下载更新 `ustc` 注册服务的索引文件,还挺大的...
#### 覆盖默认的镜像地址
事实上,我们更推荐第二种方式,因为第一种方式在项目大了后,实在是很麻烦,全部修改后,万一以后不用这个镜像了,你又要全部修改成其它的。
而第二种方式,则不需要修改 `Cargo.toml` 文件,因为它**因为它是直接使用新注册服务来替代默认的 `crates.io`**。
```toml
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
```
首先,创建一个新的镜像源 `[source.ustc]`,然后将默认的 `crates-io` 替换成新的镜像源: `replace-with = 'ustc'`
简单吧?只要这样配置后,以往需要去 `crates.io` 下载的包,会全部从科大的镜像地址下载,速度刷刷的.. 我的 300M 大刀( 宽带 )终于有了用武之地。
**这里强烈推荐大家在学习完后面的基本章节后,看一下 [Cargo 使用指南章节](https://course.rs/cargo/intro.html),对于你的 Rust 之旅会有莫大的帮助!**
## 下载卡住
下载卡住其实就一个原因:下载太慢了。
根据经验来看,卡住不动往往发生在更新索引时。毕竟 Rust 的包越来越多,索引也越来越大,如果不使用国内镜像,卡住还蛮正常的,好在,我们也无需经常更新索引 :P
#### Blocking waiting for file lock on package cache
不过这里有一个坑,需要大家注意,如果你同时打开了 VSCODE 和命令行,然后修改了 `Cargo.toml`,此时 VSCODE 的 rust-analyzer 插件会自动检测到依赖的变更,去下载新的依赖。
在 VSCODE 下载的过程中( 特别是更新索引,可能会耗时很久),假如你又在命令行中运行类似 `cargo run` 或者 `cargo build` 的命令,就会提示一行有些看不太懂的内容:
```shell
$ cargo build
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
```
其实这个报错就是因为 VSCODE 的下载太慢了,而且该下载构建还锁住了当前的项目,导致你无法在另一个地方再次进行构建。
解决办法也很简单:
- 增加下载速度,见前面内容
- 耐心等待持有锁的用户构建完成
- 强行停止正在构建的进程,例如杀掉 IDE 使用的 rust-analyer 插件进程,然后删除 `$HOME/.cargo/.package_cache` 目录

@ -63,6 +63,7 @@
/* 修改滚动条宽度 */
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
/* 表格靠左对齐 */
@ -99,6 +100,11 @@ code {
word-break: break-word;
}
/* 修复可编辑代码框顶部过窄的问题 */
code.editable, .ace_scroller {
top: 10px;
}
/* 修改书侧边目录的区域分隔行样式 */
.chapter .spacer {
@ -106,3 +112,4 @@ code {
height: 2px;
margin-top: 8px;
}

Loading…
Cancel
Save