从源构建奇偶校验后,货物构建挂起并显示“阻塞等待注册表索引上的文件锁定”

Cargo build hangs with " Blocking waiting for file lock on the registry index" after building parity from source

我从源代码中遵循了 readme instructions for building Parity 然后我执行了这个命令:

cargo build --release

然后:

~/.cargo/bin/cargo build --release

.. 按照指示;这两者都会导致我在提示挂起时收到以下消息:

 Blocking waiting for file lock on the registry index

我在Mac。

我遇到了同样的问题并通过 rm -rf ~/.cargo/registry/index/* 解决了它。

编辑:我建议先看

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

运行 cargo clean 似乎解决了问题。

我尝试按照 Readme 说明创建一个 Polkadot 节点。

我能够通过 运行 以下命令(copy/paste 到 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 代码编辑器,它还允许使用断点调试 Rust 代码

当您同时 运行 同一项目的 2 个编译时会发生这种情况。编译器使用锁定文件来避免出现数据竞争问题。有几种可能性:

  • 如果你自己运行这2个编译,解决办法很明显:你需要取消其中一个。

  • 如果您使用自动编译项目的 IDE:您可以等待作业完成或关闭 IDE。如果它不起作用,这可能是因为 RLS 挂出。您可以 pkill rls 解决问题。

  • 作为最后的手段,您可以强行移除锁:rm -rf ~/.cargo/registry/index/*.

  • 中所述

重要的是要确保您没有其他 rls 或货物 运行。 sudo pkill rls cargo 是确保它们不是的好方法。

当您同时执行两次 运行 cargo build 命令时,通常会出现此错误。如果您使用的是 IDE 检查插件是否在后台 运行 执行 cargo 命令,我使用 VS Code 时就是这种情况。

删除 rm $CARGO_HOME/.package-cache 对我有用。

我在执行 cargo run 时不小心点击了 ctrl+z 而不是 ctrl+c,而下一次执行 cargo run 显示了 Blocking waiting for file lock on the registry index。我删除了所说的文件,然后它又工作了。

编辑:
如果你像我一样不小心命中了ctrl+z,你可以通过运行fg取消挂起[=13​​=]进程,而不是删除包缓存文件。 ctrl+z 实际上向进程发送一个 SIGTSTP 信号,该进程将被挂起,直到您告诉它继续。请参阅此 answer 了解更多信息。

我的问题是 IDE 是 运行 货物并且锁定了目录。尝试关闭您的 IDE

如果您曾经点击“阻止等待包缓存上的文件锁定”,

运行 下面的命令和 运行 货物。 rm $CARGO_HOME/.package-cache

VScode 中的相同问题:如果您安装了 RLS

  1. 文件 |偏好 |设置
  2. 搜索“rls”
  3. 在“rust”扩展中,取消选中“打开文件或项目时自动启动 RLS”

重新打开你的项目,应该可以解决。

您应该暂时停止 rls 进程。

如果您确定没有其他cargo进程在执行,但仍然经常出现此问题,则可能是您的网络问题。

我的 VSCode 智能感知正在构建。确保你的智能感知没有建立。它显示一个在底部旋转的小齿轮图标。主要发生在您更新 Cargo.toml

关于聚会迟到的风险,而 cargo、rls 或 rust-analyzer 负责锁定以避免数据竞争。 一个潜在的问题可能是 inotify filewatchers.

的数量

通常他们通过产生一个新的观察者并等待轮到他们来工作,但如果他们运行没有观察者space,这可能是一个问题。 同意上述所有解决方案,但建议检查 max_user_watches

的数量
# view current settings
cat /proc/sys/fs/inotify/max_user_watches

# increasing it, /etc/sysctl.conf
fs.inotify.max_user_watches=524288

# The new value can then be loaded in by running s
$sudo sysctl -p.

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

  1. 通过$ ps aux | grep rls
  2. 搜索所有rust相关进程
  3. $ sudo kill -9 <PID>
  4. 一一停止

问题是另一个使用货物的进程。我找不到要终止的进程,所以我重新启动了我的本地机器,它成功了。

什么对我有用

对于我来说,我发现问题是由配置我的目标目录引起的:

[build]
target-dir = ".cargo/target"

在我的 .cargo/config.

什么没用

我 运行 cargo build --release -vv 看到一条没有 -vv 标志的消息:

Blocking waiting for file lock on build directory

我认为这是一个很大的线索,所以我尝试了一些方法,比如禁用我的文件备份。我也尝试了此页面上的所有答案,但没有成功。

终于。我绝对的意思是最后当一切都失败并且你想要快速退出时。重新启动机器。 也许它也是 rust-analyzer 花费的时间太长所以不要在重新启动时打开 vscode,而是使用你的终端。

对我来说,rust 分析器没有停止,关闭 IDE 也没有帮助。但是不要关闭计算机,只需关闭 IDE 并进入任务管理器(至少 windows 是这样)。在详细信息选项卡下的任务管理器中,您可以找到任何可能 运行 的货物进程并在那里杀死它们。然后你可以重新打开IDE,你应该会恢复正常。

它对我有用 linux (ubuntu) :

$ rm ~/.cargo/.package-cache

我在 macOS Monterey 12.4 中使用此命令:

rm -rf ~/.cargo/.package-cache

然后重新运行构建命令,有效。