Rails控制台错误:undefined method `each' for nil:NilClass (NoMethodError)

6
任何尝试在我的Rails应用程序的根目录中运行rails console都会产生以下错误:

未定义方法“each”以供nil:NilClass使用(NoMethodError)

完整的堆栈跟踪:

 /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/railtie.rb:245:in `each_registered_block': undefined method `each' for nil:NilClass (NoMethodError)
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/railtie.rb:224:in `run_console_blocks'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/application.rb:461:in `block in run_console_blocks'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/engine/railties.rb:13:in `each'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/engine/railties.rb:13:in `each'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/application.rb:461:in `run_console_blocks'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/engine.rb:442:in `load_console'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/commands/console.rb:34:in `initialize'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/commands/console_helper.rb:9:in `new'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/commands/console_helper.rb:9:in `start'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/commands/commands_tasks.rb:78:in `console'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/command.rb:20:in `run'
  from /Users/gnerkus/.rvm/gems/ruby-2.2.3@rails-experiments/gems/railties-5.0.0.beta1.1/lib/rails/commands.rb:19:in `<top (required)>'
  from bin/rails:4:in `require'
  from bin/rails:4:in `<main>'

我已经追踪到错误来源于 Rails lib 中 railtie.rb 文件中的这个块:

def each_registered_block(type, &block)
  klass = self.class
  while klass.respond_to?(type)
    # The ':console' type doesn't seem to exist
    klass.public_send(type).each(&block) 
    klass = klass.superclass
  end
end

这句话的意思是“它(指代的对象)来源于以下这个代码块:

def run_console_blocks(app) #:nodoc:
  each_registered_block(:console) { |block| block.call(app) }
end

我卸载了spring gem并安装了rubocop gem。否则,我的Gemfile包含默认gems。

我的Ruby版本是2.2.3,高于Rails 5推荐的2.2.2版本。

Ruby版本:2.2.3p173 Rails版本:5.0.0.beta1.1 RVM版本:1.26.11


请您能否发布完整的堆栈跟踪? - Nick Aschenbach
3个回答

5
错误是由于 web-console gem 引起的,可以在这里找到相关信息:运行 rails console 时出错。当报告此错误时,web-console 版本为 3.1.0。执行 rails console 时,web-console 的版本为 3.0.0,似乎没有产生任何错误。
您需要确保您的 web-console 版本为 3.1.1 或更高版本,因为该问题已在 3.1.1 版本中修复。

我会做的。但我必须等两天才行。 - gnerkus
2
+1 我在使用 web-console 3.1.0 和 Rails 4.2.5.1 时遇到了同样的问题,而链接的 Github 线程帮助了我。回退到 3.0 版本后,控制台又可以正常工作了。 - Paul Fioravanti
Rails 4.2.5.1也有同样的问题。但是使用更新版本的web-console,即3.1.1,也可以解决这个问题。 - Penguin

0

gem install spring 对我有用。

我的问题是:

/usr/local/bin/NMONMerge.rb:209:in `block in <main>': undefined method `each' for nil:NilClass (NoMethodError)
from /usr/local/bin/NMONMerge.rb:191:in `each'
from /usr/local/bin/NMONMerge.rb:191:in `<main>'

-2

你需要安装 Spring Gem

gem install spring  --pre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接