已安装对应版本bundler但执行rails生成迁移命令时RubyGems报错找不到
问题描述
我执行rails generate migration命令时收到如下报错:
/Users/bob/.rbenv/versions/2.7.4/lib/ruby/2.7.0/rubygems.rb:277:in 'find_spec_for_exe': Could not find 'bundler' (2.2.21) required by your /Users/bob/path/to/my/project/Gemfile.lock. (Gem::GemNotFoundException)
随后提示的操作指引为:
To update to the latest version installed on your system, run `bundle update --bundler`. To install the missing version, run `gem install bundler:2.2.21`
已确认对应版本的bundler已经安装,验证命令及输出如下:
$ gem list bundler *** LOCAL GEMS *** bundler (2.2.21) $ ruby -v ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-darwin19] $ find ~/.rbenv -name "*bundler*" | grep 2.7.4 | grep gemspec /Users/bob/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/specifications/bundler-2.2.21.gemspec /Users/bob/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.2.21/bundler.gemspec
排查发现问题出在rubygems.rb第267行代码:
specs = dep.matching_specs(true)
该行返回空数组,说明RubyGems无法找到匹配的spec文件。已尝试执行提示中的bundle update --bundler和gem install bundler:2.2.21命令,均无法解决问题。
解决方案
- 执行rbenv重哈希命令,更新rbenv的可执行文件映射关系:
rbenv rehash
- 检查项目根目录下的
.ruby-version文件内容是否为2.7.4,避免rbenv切换到其他Ruby版本执行命令。 - 验证bundler的调用路径是否正确,执行以下命令查看:
which bundle rbenv which bundle
如果which bundle输出不是/Users/bob/.rbenv/shims/bundle,或rbenv which bundle输出不是对应2.7.4版本下的bundler路径,说明rbenv的命令映射异常,可删除现有shim文件后重新生成:
rm ~/.rbenv/shims/bundle rbenv rehash
- 在项目目录下使用bundle exec前缀执行rails命令,强制调用项目配置的bundler版本:
bundle exec rails generate migration
- 检查Gemfile.lock末尾的
BUNDLED WITH字段,确认指定的版本为2.2.21,如无其他依赖冲突可删除该字段后重新执行bundle install生成锁定文件。 - 升级RubyGems到最新版本,解决旧版本RubyGems的匹配逻辑问题:
gem update --system
- 检查环境变量中是否存在GEM_HOME、GEM_PATH的异常配置,配置错误会导致RubyGems无法正确读取已安装的gem包。
内容的提问来源于stack exchange,提问作者user664833
相关产品推荐
相关产品推荐

