“<top(required)=”“>”在Ruby堆栈跟踪中意味着什么?</top>

时间:2011-06-13 12:53:31

标签: ruby

在Ruby 1.9.2堆栈跟踪中,我经常看到以<top (required)>给出的方法,如下面的堆栈部分所示。这是什么意思?我的Ruby安装是否被巧妙地破坏了?

Could not find abstract-1.0.0 in any of the sources
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/spec_set.rb:87:in `block in materialize'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/spec_set.rb:81:in `map!'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/spec_set.rb:81:in `materialize'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/definition.rb:90:in `specs'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/definition.rb:135:in `specs_for'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/definition.rb:124:in `requested_specs'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/environment.rb:23:in `requested_specs'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:11:in `setup'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler.rb:107:in `setup'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/setup.rb:14:in `<top (required)>'
<internal:lib/rubygems/custom_require>:33:in `require'
<internal:lib/rubygems/custom_require>:33:in `rescue in require'
<internal:lib/rubygems/custom_require>:29:in `require'

5 个答案:

答案 0 :(得分:19)

它是文件的顶级,即在需要文件时运行的任何内容 因此,如果在设置库时出现问题(例如找不到某些必需的文件),它将显示在堆栈跟踪中。

答案 1 :(得分:0)

当我在“Jump Start Sinatra”一书中进行教程时,我遇到了<top (required)>的错误。

我通过确保运行sudo gem install <GEM_IN_YOUR_FILE>来消除错误。所以在我的情况下,我有一个main.rb,在那个文件中我有这个

require 'sinatra'
require 'sinatra-contrib'

所以我回到项目的根目录并运行sudo gem install sinatrasudo gem install sinatra-contrib然后我的项目工作正常。

您的错误会有所不同,但因为这是我在Google上搜索时发现的,我知道其他人会因为类似的原因来到这里。我提供这个解决方案,至少可以让你思考正确的方向,因为这对我有用。

答案 2 :(得分:0)

如果您需要的所有内容都是正确的,则可能意味着您正在尝试创建一个名称已经存在于模块中的类。例如,以下文件:

class Test
end

会提出:  <top (required)>': Test is not a class (TypeError)

因为Test是一个隐含的模块。

答案 3 :(得分:0)

我遇到了同样的问题。通过使用Notepad ++将.rb文件编码转换为UTF-8-BOM解决了这个问题。

答案 4 :(得分:0)

Ninto 的回答完全有道理。这是一个堆栈跟踪,您会发现一件事失败了。我正在通过以下方式运行测试:

bundle exec rspec spec

我得到的是:

An error occurred while loading ./spec/foodie_spec.rb.
Failure/Error: require 'foodie/food'

SyntaxError:
  /Users/honey/Dev/foodie/funnex/lib/funnex/food.rb:17: syntax error, unexpected end-of-input, expecting end
# ./lib/foodie.rb:4:in `require'
# ./lib/foodie.rb:4:in `<top (required)>'
# ./spec/foodie_spec.rb:1:in `require'
# ./spec/foodie_spec.rb:1:in `<top (required)>'
No examples found.


Finished in 0.00002 seconds (files took 0.07998 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

在我的案例中我做错的只是我失踪了end

但要更多地了解堆栈跟踪,请从注释掉的行的底部开始,即这一行:

# ./spec/foodie_spec.rb:1:in `<top (required)>'
  • foodie_spec 的第 1 行,我有 require 'foodie'
  • foodie.rb 的第 4 行,我有 require 'foodie/food'
  • 我在 foodie/food 的第 17 行出错

Ruby 中的堆栈跟踪也是 named 回溯或堆栈回溯