Почему тормоз-охранник вызывает "NoMethodError: неопределенный метод` gsub '" - PullRequest
3 голосов
/ 17 июня 2019

Я использую следующие гемы в приложении Rails 5.2.

# /Gemfile

group :development do

  gem 'guard'
  gem 'guard-spring'
  gem 'guard-rspec'
  gem 'brakeman', require: false
  gem 'guard-brakeman'

  # ...

end

# ...

Brakeman отлично работал с Guard, но недавно что-то изменилось.

> bundle exec guard 

... usual startup trace 

------ brakeman warnings --------
00:52:13 - INFO - 6 brakeman findings
00:52:13 - ERROR - Guard::Brakeman failed to achieve its <start>, exception was:
> [#8fe733251410] NoMethodError: undefined method `gsub' for #<Brakeman::FilePath:0x00007f8d0f2c9ea0>
> [#8fe733251410] /Users/me/.rvm/gems/ruby-2.5.3@myapp/gems/guard-brakeman-0.8.3/lib/guard/brakeman.rb:206:in `decorate_warning'

...

00:52:13 - INFO - Guard::Brakeman has just been fired

Глядя на репозиторий gem , рядом со строкой есть комментарий об этой ошибке

/lib/guard/brakeman.rb
# ...
# line 206
output << " near line #{warning.line}" if warning.line
if warning.file
  # fix this ish or wait for brakeman to be fixed
  filename = warning.file.gsub(@options[:app_path], '')
  # ...

Кто-нибудь еще испытывает эту проблему? Я неправильно настроил свое приложение, и это мешает работе Brakeman с Guard? Или в жемчужине есть проблема?

1 Ответ

2 голосов
/ 17 июня 2019

Эта ошибка возникает из-за того, что последняя версия Brakeman (4.5.1) изменила класс warning.file с String на Brakeman::FilePath.

guard-brakeman действительно должен был использовать Brakeman::Warning#relative_path все время, но, к сожалению он был (ошибочно) удален в Brakeman 4.5.1 .

Короче, пожалуйста, попробуйте сейчас прикрепить к Brakeman 4.5.0 и подождать, пока не выйдет следующий релиз Brakeman или guard-brakeman, чтобы решить эту проблему.

Я открыл https://github.com/guard/guard-brakeman/pull/36 и https://github.com/presidentbeef/brakeman/pull/1365.

О таких проблемах, вероятно, следует сообщать как об ошибках в проектах, а не о том, что они задаются в StackOverflow.

...