运行pre-commit的markdownlint报错找不到ruby2.7如何解决
问题上下文
运行pre-commit时出现如下报错:
Markdownlint.............................................................Failed - hook id: markdownlint - exit code: 1 Executable `/usr/bin/ruby2.7` not found
执行ruby --version命令得到的输出为:
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]
咨询问题
如何进行配置,才能让pre-commit正确识别到匹配的ruby版本?
解决方法
- 显式指定钩子使用的ruby版本
打开项目根目录下的.pre-commit-config.yaml配置文件,找到markdownlint对应的钩子配置段,添加language_version参数指定本地已安装的ruby版本即可:
如果版本号匹配仍然报错,可以直接指定ruby可执行文件的绝对路径,适配自定义安装路径的场景:- id: markdownlint language_version: 3.0.2
配置修改完成后,执行- id: markdownlint executable: /usr/bin/rubypre-commit install重载配置,再运行pre-commit run markdownlint --all-files验证效果。 - 创建软链接兼容硬编码路径
该报错本质是旧版markdownlint钩子硬编码了/usr/bin/ruby2.7的查找路径,直接给系统现有ruby创建对应软链接即可绕过检查:
命令执行完成后重新运行pre-commit即可正常调用。sudo ln -s /usr/bin/ruby /usr/bin/ruby2.7 - 更新钩子到最新版本
旧版本markdownlint钩子存在硬编码低版本ruby路径的已知问题,执行以下命令更新所有钩子到最新版本,新版会自动适配系统已安装的ruby环境:pre-commit autoupdate pre-commit install --install-hooks
如果你使用rvm、rbenv等ruby版本管理工具,需要确认pre-commit运行时加载的环境变量中,ruby路径和终端执行
which ruby得到的路径一致,避免环境隔离导致的路径识别错误。
内容的提问来源于stack exchange,提问作者a.t.
相关产品推荐
相关产品推荐

