【问题标题】:Annotate gives Nomethod errorAnnotate 给出 Nomethod 错误
【发布时间】:2011-12-17 16:45:17
【问题描述】:

我有 ruby​​ 1.9.2 和 rails 3.1。我试图让 annotate 2.4.0 工作,但我得到 nomethod 错误。我已经尝试卸载并重新安装,但它没有帮助。跳转后请查看线轴。任何有关如何进行的建议都会有所帮助。

~/myapps/testapp/app>sudo gem install annotate
Fetching: annotate-2.4.0.gem (100%)
Successfully installed annotate-2.4.0
1 gem installed
~/myapps/testapp/app>bundle exec annotate -e -p before
/Users/mymachine/.rvm/gems/ruby-1.9.2-p290/gems/annotate-2.4.0/bin/annotate:61:in block (2 levels) in <top (required)>': undefined methodeach' for nil:NilClass (NoMethodError)
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1308:in call'
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1308:inblock in parse_in_order'
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1264:in catch'
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1264:inparse_in_order'
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1258:in order!'
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1349:inpermute!'
from /Users/mymachine/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/optparse.rb:1370:in parse!'
from /Users/mymachine/.rvm/gems/ruby-1.9.2-p290/gems/annotate-2.4.0/bin/annotate:8:in'
from /Users/mymachine/.rvm/gems/ruby-1.9.2-p290/bin/annotate:19:in load'
from /Users/mymachine/.rvm/gems/ruby-1.9.2-p290/bin/annotate:19:in'

【问题讨论】:

标签: ruby-on-rails ruby annotate


【解决方案1】:

-e 标志需要你没有给出的参数。

你可以通过查看堆栈跟踪来判断这一点,错误是nil 没有方法each。由于在 optparse 文件中引发了错误,因此您可以推断 optparse 尝试迭代某些不存在的选项。当然,这会导致 annotate -h 显示“-e, --exclude [tests,fixtures] 不要注释固定装置、测试文件或两者”

【讨论】:

  • 约书亚 - 感谢您的回复。虽然这本身可能是一个问题,但即使我提供了这些参数,该命令也不会运行。它确实有助于获得正确的错误消息。唯一有效的命令是“annotate -h”。如果我给 annotate -v,这就是我看到的:/Users/mymachine/.rvm/gems/ruby-1.9.2-p290/gems/annotate-2.4.0/lib/annotate.rb:8:in version': private method load' called for YAML:Module (NoMethodError) from /Users/mymachine/.rvm/gems/ruby-1.9.2-p290/gems/annotate-2.4.0/bin/annotate:28:in block (2 levels) in '` ... Thoughts??
  • 看了一圈,这个 gem 的作者在写它的时候并不了解 ruby​​ 生态系统。您可以通过打开 gem 并在 lib/annotate/annotate.rb 中粘贴 require 'yaml' 来使该版本正常工作。它是预捆绑器,因此它不管理它的依赖项,导致我必须尝试不同的 rspecs 才能让它运行测试(它已使用 RSpec 1 进行了测试)。它期望的 ActiveSupport 版本也很旧,我能够让测试通过 2.3.14 版本我还得到它来注释 Rails 2.3.5 项目。没有尝试过任何更新的东西。
  • 谢谢约书亚。我认为这可能有效,但我选择了另一种解决方案。 mask8 发布了一个关于同一问题的链接(见上文)到另一个线程。答案是使用 2.4.1.beta 而不是 gem 的 2.4.0 版本。我试过了,它也解决了。但也感谢分享这个解决方案。万一测试版出现问题,现在我知道该怎么做了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多