使用源代码构建parity后,Cargo构建卡在"阻塞等待注册表索引的文件锁定"处。

276

我按照readme中的指示从源代码构建了Parity,然后执行了以下命令:

cargo build --release
~/.cargo/bin/cargo build --release
根据指示,两者在提示符挂起的同时返回了以下消息。
 Blocking waiting for file lock on the registry index

我用的是 Mac 电脑。


54
对我来说问题在于我的 rust-analyzer vscode 插件正在进行索引。一旦它完成,运行 cargo run 命令就能正常工作了。 - oriont
14
在使用 Rustler 在 Elixir 中使用 Rust 代码时,我在 Linux 上遇到了同样的问题。根据此问题 https://github.com/rust-lang/cargo/issues/9742 中提到的方法,通过删除 ~/.cargo/.package-cache 目录来解决该问题。 - Ali Shirvani
1
VSCode 是我的瓶颈,就像 @oriont 所说的那样。我只需要等待 rust-analyzer 完成它正在做的事情即可。 - Alan Richards
1
我相信这只适用于少数用户,但对我来说,重新启动Visual Studio Code解决了问题。 - John Miller
@oriont是正确的。当我的rust-analyser正在索引时,我遇到了这个问题。 - intlsy
显示剩余4条评论
31个回答

7

我通过运行以下命令解决了这个问题:

  1. 通过 $ ps aux | grep rls 搜索所有与 rust 相关的进程
  2. 逐个停止它们,使用 $ sudo kill -9 <PID>

1
这就是我遇到的问题。rustc进程没有响应并锁定了目录。其他答案都无效,所以我来这里添加一个回复来解释相同的情况。 - Emilio
PID在你有机会杀死它之前就已经改变了。 - Luke Schoen
1
@LukeSchoen PID没有改变,进程正在重新启动或使用新的PID重新生成。尝试使用sudo pkill rls cargo命令,它可以找到并终止所有实例。 - robrecord

6

如果您安装了RLS,同样的问题也会在VScode中出现:

  1. 选择 文件 | 首选项 | 设置
  2. 搜索 "rls"
  3. 在 "rust" 扩展中,取消勾选 "打开文件或项目时自动启动RLS"

重新打开您的项目,这个问题应该就解决了。


5

这对我在Linux(Ubuntu)上有效:

$ rm ~/.cargo/.package-cache

5

这有助于解决问题 rm ~/.cargo/.package-cache

在我的 cargo.toml 中添加 rand = "0.8.5" 后,阻塞开始了。


4
在执行已接受答案中建议的删除Cargo注册表索引之前,请确保没有其他进程正在编译Parity或任何其他Rust包。

4

Windows:我打开了任务管理器并结束了Cargos进程

enter image description here


4

我按照Readme中的说明尝试创建Polkadot节点。

通过运行以下命令(在Bash终端中复制/粘贴)我成功构建了它:

git clone https://github.com/paritytech/polkadot;
cd polkadot; git checkout master;
rustup update nightly;
rustup target add wasm32-unknown-unknown --toolchain nightly;
rustup update stable;
rustup default stable;
cargo install --git https://github.com/alexcrichton/wasm-gc --force;
cargo install --git https://github.com/pepyakin/wasm-export-table.git --force;
brew install openssl; brew upgrade openssl;
rustc --version; cargo --version;
./build.sh;
cargo build;
cargo run -- --help;
./target/debug/polkadot --help;

我随后尝试使用以下命令(等效)运行Polkadot节点:

./target/debug/polkadot -- --chain=dev --validator --key Alice -d /tmp/alice;
cargo run -- --chain=dev --validator --key Alice -d /tmp/alice;

但实际上它显示了以下内容:
Blocking waiting for file lock on the git checkouts
Blocking waiting for file lock on build directory

我发现这是由于CLion(Jetbrains IDE)引起的。
我通过关闭CLion解决了这个问题。我使用了Visual Studio Code编辑器,它也允许使用断点调试Rust代码。

简短的回答是:如果您打开了Jetbrains IDE,请尝试关闭它。我在Linux + IDEA上遇到过这种情况。 - JNissi

3

我曾经遇到这样一个情况,我的vscode中的一款名为rust-analyzer的Rust扩展程序更新后出现了问题。我对其进行了更新并重新加载了该扩展程序,然后cargo build成功运行。


3

如果你遇到了"Blocking waiting for file lock on package cache"的错误,

运行下面的命令,然后再次运行cargo。 rm $CARGO_HOME/.package-cache


2

问题是另一个进程正在使用cargo。我无法找到要终止的进程,所以我重新启动了本地计算机,然后它就起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接