使用cargo run时跳过更新crates.io索引



我有一个用Rust编写的简单程序。当我在终端中键入cargo run时,它总是显示:

Updating crates.io index...

这大约需要40秒。但我只是想执行我的程序,我认为货物不需要每次运行程序时都更新索引,因为这会使测试非常缓慢。。。

有没有跳过的选项?

我发现了:

由于我在Docker容器中运行货物,我需要持久地存储货物缓存,因为每次容器重新启动时它都会重置。

《货物手册》包含了您想要了解的关于cargo的所有信息。请参阅此以禁用索引更新。

我自己也试过使用这个功能,下面是有效的命令:

cargo +nightly run -Z no-index-update

+nightly对我来说也是新事物,但我在这里找到了它。

这个答案是由用户thefeiterCaptain Fim提出的,但我认为更完整的答案可能是cool rust/linux新来者

当我们使用dockerrun时,每次运行容器时都会更新索引,因为在运行之间不共享缓存。因此,要跳过索引更新,正如Captain Fim所提到的,您需要在容器上设置CARGO_HOME环境变量。此环境变量应包含永久文件夹的路径。一个简单的解决方案是使用docker卷在主机和容器之间共享缓存。

在我的情况下,我在主机上的项目中创建了cargo_home文件夹(可能在其他地方(。我已经将整个项目文件夹传递到容器中,并将CARGO_HOME的docker-ev变量设置为CARGO_HOME文件夹的容器路径。

构建我的应用程序的命令看起来像这个

docker run --rm --user "$(id -u)":"$(id -g)" -e CARGO_HOME=/usr/src/myapp/cargo_home -v "$PWD":/usr/src/myapp -w /usr/src/myapp rust-compiler cargo build

第一次运行此命令需要一些时间,但您应该会看到cargo_home文件夹中充满了文件。下次运行该命令时,它应该使用cargo_home文件夹作为缓存。如果你的应用程序源代码没有更改,这应该是即时的。

最新更新