JRuby 9.1.17.0执行bundle install时gem安装路径错误问题
可能的原因如下:
项目级Bundler配置残留
你此前使用jruby-9.2.19.0版本时在当前项目执行过bundle相关操作,Bundler会将指定的gem安装路径、Ruby解释器绑定配置写入项目根目录下的.bundle/config文件。Bundler读取配置时会优先使用项目本地配置,优先级高于全局gem环境配置,因此即使全局版本切换后,仍然会按照旧配置的路径安装gem。
排查方式:检查.bundle/config文件中是否存在BUNDLE_PATH、BUNDLE_RUBY等指向旧版本路径的配置项,删除对应配置项或直接删除整个.bundle目录后重新执行bundle install即可。RubyMine项目级SDK配置未更新
RubyMine的全局默认解释器配置优先级低于单独项目的SDK绑定配置,仅修改全局默认版本不会自动同步到已创建的项目中。同时RubyMine的运行/调试配置也可以单独绑定指定的解释器版本,若配置未更新,执行命令时仍然会调用旧版本的JRuby及对应bundle程序。
排查方式:打开文件 > 项目结构 > 项目设置 > 项目,确认当前项目绑定的SDK为jruby-9.1.17.0,同时检查运行/调试配置中bundle命令对应的解释器版本是否正确。系统环境变量残留
若你此前安装jruby-9.2.19.0时配置过GEM_HOME、GEM_PATH系统环境变量,且未随版本卸载同步删除,会直接覆盖gem env的默认配置。另外若PATH环境变量中旧版JRuby的bin目录排序在新版之前,你执行bundle命令时实际调用的是旧版本JRuby下的bundle可执行文件,自然会按照旧版本的路径规则安装gem。
排查方式:Windows环境下执行echo %GEM_HOME%、echo %PATH%检查对应变量值,删除旧版本相关的配置项后重启终端再尝试。Gemfile显式版本约束
检查项目Gemfile头部是否存在JRuby版本约束配置,例如ruby '2.3.3', engine: 'jruby', engine_version: '9.2.19.0',Bundler会优先匹配该约束对应的运行环境,当本地运行的版本不匹配时,会自动创建对应版本的目录存放gem。版本管理器配置残留
如果你使用了Ruby版本管理工具(如RVM、rbenv、pik等),检查项目根目录下是否存在.ruby-version、.rvmrc这类版本指定文件,若文件内指定的版本为jruby-9.2.19.0,版本管理器会在你进入项目目录时自动切换到旧版本,导致后续安装路径异常。
内容的提问来源于stack exchange,提问作者Pro_grammer

