You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下Rails执行generate controller命令报GemNotFound错误求解

Rails控制器生成时报Bundler::GemNotFound错误解决方案

问题场景

  • 系统环境:MacOS,使用rbenv管理Ruby版本,Ruby版本为2.6.3,Rails版本为6.1.4.x
  • 复现步骤:
    1. 执行rails new my-app创建项目成功
    2. 进入项目目录执行rails s启动服务成功,可正常访问localhost:3000默认页
    3. 执行rails g controller home index时抛出如下错误:
Traceback (most recent call last):
    20: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/bin/spring:49:in `<main>'
    19: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/lib/spring/client.rb:30:in `run'
    18: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/lib/spring/client/command.rb:7:in `call'
    17: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/lib/spring/client/server.rb:9:in `call'
    16: from /Users/marcoscampos/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
    15: from /Users/marcoscampos/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
    14: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/lib/spring/server.rb:9:in `<top (required)>'
    13: from /Users/marcoscampos/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
    12: from /Users/marcoscampos/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
    11: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/lib/spring/commands.rb:4:in `<top (required)>'
    10: from /Library/Ruby/Gems/2.6.0/gems/spring-2.1.1/lib/spring/commands.rb:33:in `<module:Spring>'
     9: from /Users/marcoscampos/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
     8: from /Users/marcoscampos/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
     7: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/setup.rb:20:in `<top (required)>'
     6: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/ui/shell.rb:88:in `silence'
     5: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/ui/shell.rb:136:in `with_level'
     4: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/setup.rb:20:in `block in <top (required)>'
     3: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler.rb:149:in `setup'
     2: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/runtime.rb:18:in `setup'
     1: from /Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/definition.rb:228:in `specs_for'
/Library/Ruby/Gems/2.6.0/gems/bundler-2.2.26/lib/bundler/definition.rb:490:in `materialize': Could not find sqlite3-1.4.2, puma-5.4.0, bootsnap-1.7.7, byebug-11.1.3, nio4r-2.5.8, msgpack-1.4.2, bindex-0.8.1, nokogiri-1.12.3, websocket-driver-0.7.5, sassc-2.4.0, ffi-1.15.3, racc-1.5.2 in any of the sources (Bundler::GemNotFound)

对应的Gemfile内容如下:

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.3'

gem 'rails', '~> 6.1.4', '>= 6.1.4.1'
gem 'sqlite3', '~> 1.4'
gem 'puma', '~> 5.0'
gem 'sass-rails', '>= 6'
gem 'webpacker', '~> 5.0'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.7'

gem 'bootsnap', '>= 1.4.4', require: false

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'web-console', '>= 4.1.0'
  gem 'rack-mini-profiler', '~> 2.0'
  gem 'listen', '~> 3.3'
  gem 'spring'
end

group :test do
  gem 'capybara', '>= 3.26'
  gem 'selenium-webdriver'
  gem 'webdrivers'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

根因说明

这个错误是Spring预加载服务缓存了错误的Ruby环境路径导致的:启动Rails服务时用的是rbenv管理的用户级Ruby环境,gem包安装在用户目录下;但调用rails generate命令时,Spring调用了系统自带的Ruby,系统Ruby路径下没有安装项目需要的对应版本gem,因此抛出找不到依赖的错误。

解决步骤

按顺序执行以下操作即可:

  1. 停止当前运行的Spring服务,清除缓存:
spring stop
  1. 校验当前Ruby环境是否为rbenv管理的2.6.3版本:
which ruby
# 预期输出为 /Users/你的用户名/.rbenv/shims/ruby,若输出为/usr/bin/ruby则说明用的是系统Ruby
ruby -v
# 预期输出为 ruby 2.6.3 相关版本信息

如果环境不匹配,执行以下命令切换:

rbenv local 2.6.3
rbenv rehash
  1. 重新安装项目所有依赖:
bundle install

如果安装原生gem(如sqlite3、ffi)时报编译错误,先安装Xcode命令行工具后重试:

xcode-select --install
  1. 重新执行控制器生成命令:
rails g controller home index

内容的提问来源于stack exchange,提问作者mcgha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:45:03