jRuby-1.6.5: неопределенный метод NoMethodError '[]' для nil: NilClass - PullRequest
1 голос
/ 20 декабря 2011

Моя среда:

jRuby-1.6.5
Rails 2.3.8

Камни:

  • actionmailer (2.3.8)
  • actionpack (2.3.8)
  • activerecord (2.3.8)
  • activerecord-jdbc-адаптер (1.1.1)
  • activerecord-jdbcpostgresql-адаптер (0.8.2)
  • activeresource (2.3.8)
  • activesupport (2.3.8)
  • arel (2.2.1)
  • bouncy-castle-java (1.5.0145.2)
  • строитель (3.0.0)
  • связка (1.0.21)
  • капибара (0.4.1.2)
  • скорость (0.8.9)
  • дочерний процесс (0.1.8)
  • колонизатор (0.3.2)
  • конфигурация (1.2.0)
  • огурец (0.10.0)
  • огуречный рельс (0.3.2)
  • culerity (0.2.15)
  • database_cleaner (0.6.6)
  • diff-lcs (1.1.2)
  • factory_girl (1.3.3)
  • fastcsv (1.5.4)
  • ffi (1.0.7)
  • gem_plugin (0.2.3)
  • огурчик (2.3.5)
  • jdbc-postgres (8.4.702)
  • jruby-jars (1.5.5)
  • jruby-openssl (0.7.3)
  • json (1.4.6)
  • json_pure (1.5.1)
  • launchy (0.4.0)
  • mime-типы (1.16)
  • nokogiri (1.4.4.2)
  • стойка (1.1.0)
  • стойка-тест (0.5.7)
  • рельсы (2.3.8)
  • грабли (0.8.7)
  • rcov (0.9.9)
  • rspec (1.3.1)
  • rspec-rails (1.3.3)
  • ruby-debug (0.10.4)
  • ruby-debug-base (0.10.4)
  • rubyzip (0.9.4)
  • selenium-client (1.2.18)
  • selenium-webdriver (0.1.4)
  • sources (0.0.1)
  • term-ansicolor (1.0.5)
  • слабый (0.0.4)
  • xpath (0.1.3)

Используя jRuby-1.6.5 и метрический самоцвет, получил следующую проблему:

Выполнить метрические из корня приложения

После анализа всех файлов ruby ​​из папок app и lib, командная строка выдает следующее:

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

Где проблема у меня естьне знаю, просто интересно, как обойти это, или, возможно, избежать этого, потому чтоЭто очень раздражает, так как моя команда не видит метрики для данного кода.

Заранее спасибо.

1 Ответ

1 голос
/ 07 января 2012

Давайте посмотрим на трассировку стека. Это вам многое говорит.

В верхней части стека вы видите saikuro.rb:232. Вот это:

https://github.com/jscruggs/metric_fu/blob/4c12cfa9cf20e38d4d1e3e01455613ff48563ad8/lib/generators/saikuro.rb#L232

Существует только один вызов метода для [], поэтому можно предположить, что line.match(TYPE_REGEX) равно nil. Это почему? Ну, мы не знаем. Но, глядя на стек, мы совершенно уверены, что мы пришли к этой ситуации, читая @file_handle для Saikuro::SFile. Мы не нашли строку, которая соответствует TYPE_REGEX=/Type:(.*) Name/.

Будет очень поучительно узнать, какие параметры получает Saikuro::SFile.new. Попробуйте найти его и изучите содержимое файла.

...