在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'
答案 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 sinatra
和sudo 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 回溯或堆栈回溯