我的环境:
jRuby-1.6.5
Rails 2.3.8
宝石:
使用jRuby-1.6.5和metrical gem,遇到了以下问题:
从应用程序的根目录执行metrical
解析app和lib文件夹中的所有ruby文件后,命令行输出以下内容:
NoMethodError: undefined method `[]' for nil:NilClass
initialize at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/generators/saikuro.rb:232
get_elements at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/generators/saikuro.rb:169
initialize at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/generators/saikuro.rb:130
assemble_files at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/generators/saikuro.rb:111
each at org/jruby/RubyArray.java:1612assemble_files at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/generators/saikuro.rb:109
analyze at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/generators/saikuro.rb:27
send at org/jruby/RubyKernel.java:2093
generate_report at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/base/generator.rb:130
each at org/jruby/RubyArray.java:1612
generate_report at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/base/generator.rb:128
add at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metric_fu-2.1.1/lib/base/report.rb:60
run_metric_fu at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metrical-0.0.7/lib/metrical.rb:51
each at org/jruby/RubyArray.java:1612
run_metric_fu at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metrical-0.0.7/lib/metrical.rb:51
run at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metrical-0.0.7/lib/metrical.rb:18
(root) at c:/jruby-1.6.5/lib/ruby/gems/1.8/gems/metrical-0.0.7/bin/metrical:4
load at org/jruby/RubyKernel.java:1063
(root) at c:\jruby-1.6.5\bin\metrical:19
问题出在哪里我不知道,只是想知道如何绕过它,或者可能避免它,因为我的团队无法看到给定代码的指标,这非常令人恼火。
提前谢谢。
答案 0 :(得分:1)
让我们看看堆栈跟踪。它告诉了你很多。
在堆栈顶部,您会看到saikuro.rb:232
。就是这样:
只有一个方法调用[]
,因此可以安全地假设line.match(TYPE_REGEX)
为nil
。这是为什么?好吧,我们不知道。但是看一下堆栈,我们相当肯定我们在为@file_handle
阅读Saikuro::SFile
时遇到了这种情况。我们找不到与TYPE_REGEX=/Type:(.*) Name/
匹配的行。
了解Saikuro::SFile.new
获得的参数将是非常有益的。尝试搜索它,并检查文件内容。