jRuby-1.6.5: неопределенный метод NoMethodError '[]' для nil: NilClass

Моя среда:

jRuby-1.6.5
Rails 2.3.8

Драгоценные камни:

  • Actionmailer (2.3.8)
  • пакет действий (2.3.8)
  • активная запись (2.3.8)
  • activerecord-jdbc-адаптер (1.1.1)
  • activerecord-jdbcpostgresql-адаптер (0.8.2)
  • активный ресурс (2.3.8)
  • activesupport (2.3.8)
  • арель (2.2.1)
  • надувной замок-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)
  • лаконичность (0.2.15)
  • database_cleaner (0.6.6)
  • diff-lcs (1.1.2)
  • фабрика_девушка (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)
  • запуск (0.4.0)
  • пантомимы (1.16)
  • нокогири (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-рельсы (1.3.3)
  • рубиновая отладка (0.10.4)
  • рубиновая-отладка-база (0.10.4)
  • rubyzip (0.9.4)
  • селен-клиент (1.2.18)
  • селен-webdriver (0.1.4)
  • источники (0.0.1)
  • термин-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

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

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


person Jackie Chan    schedule 19.12.2011    source источник


Ответы (1)


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

Вверху стопки вы видите 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. Попробуйте выследить это и изучить содержимое файла.

person banzaiman    schedule 07.01.2012