Bundler使用错误Ruby版本:Rails服务器启动遇版本不匹配问题
解决Bundler与Ruby版本不匹配的问题
看起来你遇到的问题是明明已经通过rbenv设置了Ruby 2.3.8,但bundle exec rails s却还是调用了系统自带的2.3.7版本。咱们一步步来排查和解决:
快速修复步骤
1. 重新初始化rbenv并重启终端
有时候终端会话的环境变量会存在缓存,先在当前终端执行:
eval "$(rbenv init -)"
然后完全关闭终端再重新打开,再次尝试运行bundle exec rails s。
2. 重新安装Bundler,绑定当前Ruby版本
如果之前是用系统Ruby安装的Bundler,即使切换了rbenv的Ruby版本,还是可能调用旧的Bundler实例。执行以下命令:
# 卸载所有版本的Bundler gem uninstall bundler -a # 用当前rbenv管理的Ruby重新安装Bundler gem install bundler
之后重新运行bundle install,再启动Rails服务器。
3. 清理项目的bundle缓存
项目的.bundle目录和vendor/bundle可能缓存了旧的Ruby路径,执行:
rm -rf .bundle vendor/bundle # 重新安装项目依赖 bundle install
4. 更新rbenv的shims脚本
执行rbenv rehash,确保rbenv生成的shims脚本是最新的,让系统能正确找到你指定的Ruby版本。
关于Bundler选择Ruby版本的逻辑说明
Bundler选择Ruby版本的规则其实很清晰:
- 它会使用当前shell环境中优先级最高的Ruby版本,也就是
PATH环境变量里排在最前面的ruby可执行文件对应的版本。 - 像rbenv这类版本管理器,核心是把自己的shims目录(比如
~/.rbenv/shims)放到PATH最前面,这样你运行ruby、bundle等命令时,会优先调用rbenv管理的版本。 - 但如果你的Bundler是用另一个Ruby版本安装的(比如系统自带的2.3.7),即使切换了Ruby版本,
bundle exec仍可能调用旧版本Ruby的gem环境,这就是重新安装Bundler能解决问题的原因。
从你的命令输出来看,ruby -v、rbenv version和bundle env都显示当前Ruby是2.3.8,说明环境变量本身是正确的,大概率是缓存或Bundler绑定的Ruby版本不对导致的,按照上面的步骤应该能解决问题。
内容的提问来源于stack exchange,提问作者Ceasar
相关产品推荐
相关产品推荐

