执行bundle exec rake命令报错ruby3.0不存在,求助解决方案
解决sudo执行bundle exec rake时找不到ruby3.0的问题
问题背景
执行命令:
sudo bundle exec rake ridge:apply ALLOW_DROP_TABLE=1 ALLOW_REMOVE_COLUMN=1
报错:
/usr/bin/env: ‘ruby3.0’: No such file or directory
已确认信息:
- 普通用户下
which ruby返回/home/hai/.rbenv/shims/ruby - 已创建软链接
sudo ln -sv /home/hai/.rbenv/shims/ruby /usr/bin/ruby ruby -v显示版本为ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
核心原因
- sudo环境变量被重置:sudo默认使用受限的PATH,不包含rbenv的shims目录,导致系统无法找到rbenv管理的Ruby。
- 脚本shebang指定ruby3.0:报错提示寻找
ruby3.0命令,但你仅创建了ruby的软链接,名称不匹配。
解决方案
方案1:创建ruby3.0的软链接
直接建立ruby3.0指向rbenv Ruby的软链接,匹配脚本的shebang要求:
sudo ln -sv /home/hai/.rbenv/shims/ruby /usr/bin/ruby3.0
方案2:让sudo继承用户环境
执行命令时添加-E参数,让sudo保留当前用户的环境变量(包括PATH):
sudo -E bundle exec rake ridge:apply ALLOW_DROP_TABLE=1 ALLOW_REMOVE_COLUMN=1
方案3:修改sudo的secure_path配置
使用visudo编辑sudo配置文件(避免语法错误):
sudo visudo
找到Defaults secure_path行,将rbenv的shims目录添加进去:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/home/hai/.rbenv/shims
保存后,sudo执行时就能自动识别rbenv管理的Ruby。
内容的提问来源于stack exchange,提问作者Haidepzai
相关产品推荐
相关产品推荐

