如何让rbenv Shim在当前Ruby版本无对应bin时回退到系统安装?
解决方案
1. 配置rbenv让Shim回退到系统命令
rbenv 默认逻辑是:当shim对应的命令在当前Ruby环境中不存在时,会自动回退到系统命令。但你的场景里,wkhtmltopdf的shim已经存在(来自另一Ruby版本安装的wkhtmltopdf-binary),所以rbenv会优先调用这个shim,哪怕当前环境没有对应的可执行文件。可以通过以下方式调整:
- 临时修改PATH优先级:运行项目B测试前,把系统
wkhtmltopdf所在路径放到PATH最前面,比如:PATH=/usr/bin:$PATH bundle exec rails test - 项目级PATH配置:在项目B根目录创建
.rbenv-vars文件,添加:
rbenv会自动加载这个文件的变量,让系统命令优先级高于shim。PATH=/usr/bin:$PATH
2. 直接指定wicked_pdf的工具路径
无需调整PATH,直接在项目B中强制wicked_pdf使用系统级工具:
在config/initializers/wicked_pdf.rb中添加配置:
WickedPdf.config = { exe_path: '/usr/bin/wkhtmltopdf' # 替换为你的系统wkhtmltopdf实际路径 }
这样不管PATH优先级如何,wicked_pdf都会直接调用指定的系统工具,彻底规避shim的影响。
3. 移除全局wkhtmltopdf Shim(谨慎操作)
如果项目A仅在Ruby 3.1.1环境下使用,可手动删除rbenv生成的全局shim:
rm ~/.rbenv/shims/wkhtmltopdf
之后,只有当前Ruby环境安装了wkhtmltopdf-binary时,rbenv才会生成对应shim,否则会直接使用系统命令。注意:后续若在其他Ruby环境需要该gem,需重新执行rbenv rehash生成shim。
内容的提问来源于stack exchange,提问作者BroiSatse
相关产品推荐
相关产品推荐

