rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”

背景

在之前学习 rust 时,使用过一段时间 rustlings 感觉还不错,但是之前的学习只把 rustlings 的题目刷了一半,然后想再从头到尾刷一遍 rustlings 的题目。

在 rustlings 的 README.md 文档中也没有找到重置 rustlings 的方法,而且官方的分支也更新到了 v6.2.0(我之前使用的似乎是 v5.x 版本的)。索性直接把整个文件夹删掉,再重新搞一遍,顺便也可以试试 v6.2.0 有啥不一样,一石二鸟。

然后,按之前的记忆安装 rustlings(就是没细看现在的 README.md 文档,因为之前的安装记忆犹新...)。然后就是一半是按记忆里的,一半是那个 README.md 文档里的,具体就是:

$: git clone https://github.com/rust-lang/rustlings.git
$: cd rustlings/
$: cargo install rustlings
$: rustlings init

然后,就报错了...

$:~/rust/rustlings$ rustlings
Error: You are trying to run Rustlings using the old method before version 6.
The new method doesn't include cloning the Rustlings' repository.
Please follow the instructions in `README.md`:
https://github.com/rust-lang/rustlings#getting-started

分析

按终端的提示信息应该是一个旧版本的 rustlings 和一个 version 6 版本的 rustlings 有冲突,初步感觉是之前的 rustlings 没卸载干净。

那好,就再按规范再卸载一次 cargo uninstall rustlings,保险起见还在目录里敲了个 cargo clean

然后,我再

$: git clone https://github.com/rust-lang/rustlings.git
$: cd rustlings/
$: cargo install rustlings
$: rustlings init

然后,就又报错了...

$:~/rust/rustlings$ rustlings
Error: You are trying to run Rustlings using the old method before version 6.
The new method doesn't include cloning the Rustlings' repository.
Please follow the instructions in `README.md`:
https://github.com/rust-lang/rustlings#getting-started

进一步分析

明显感觉到不对劲,然后我直接在 vscode 里把源码的文件夹打开,看看这个 error 是什么条件产生的,在 rustlings/src/main.rs

const OLD_METHOD_ERR: &str =
    "You are trying to run Rustlings using the old method before version 6.
The new method doesn't include cloning the Rustlings' repository.
Please follow the instructions in `README.md`:
https://github.com/rust-lang/rustlings#getting-started";

就是这段话,一模一样,然后查找 OLD_METHOD_ERR 在哪里有调用,还是在这个文件里

    if cfg!(not(debug_assertions)) && Path::new("dev/rustlings-repo.txt").exists() {
        bail!("{OLD_METHOD_ERR}");
    }

第一个条件检查代码是否在发布模式下运行,如果代码在发布模式下编译(即没有调试断言)cfg!(not(debug_assertions)) 返回 true,这个条件没问题,我就是在发布模式下运行的。

那么问题就在第二个条件里了,第二个条件检查 dev/rustlings-repo.txt 是否存在。去到那个目录下,果然存在这个文件,文件内容是

This file is used to check if the user tries to run Rustlings in the repository (the method before version 6)

好家伙,看了这段话才恍然大悟,version 6version 5 rustlings 的安装使用方法变更了,然后又重新看了 README.md 文档。

果然,人家现在不需要再像之前 version 5 的时候,必须先把 rustlings 的库 clone 到本地,然后再安装初始化使用。只需要直接在终端敲 cargo install rustlings 然后正常的初始化就可以使用了,省了之前的 库 clone 到本地 那一步。

解决方法

$: cargo install rustlings
$: cd rustlings/
$: rustlings init

总结

这 rustlings 版本更新后,也不在 README.md 文档明说一下version 6version 5 rustlings 的安装使用方法变更了,坑坑坑。

好吧,好像根本原因在我没细看人家的文档...

posted @ 2024-08-24 18:42  likkoliu  阅读(122)  评论(0编辑  收藏  举报