поиск шальных кладет в код ruby - PullRequest
3 голосов
/ 31 января 2011

У нас довольно большое приложение rails, и я запустил этот вывод в нашем unicorn.log:

#:0xc644248>#:0xc644248>#:0xc4f06e4>#:0xc4f06e4>#:0xca481b4>#:0xca481b4>#:0xc53f604>#:0xc53f604>#:0xcd7a60c>#:0xcd7a60c>#:0xc5df2f8>#:0xc5df2f8>#:0xc69fd00>#:0xc69fd00>#:0xc560ae8>#:0xc560ae8>

Мне кажется, что, возможно, где-то произошел случайный вызов метода Kernel.puts, но я искал несколько часов и не могу его найти.

У кого-нибудь есть советы по отслеживанию чего-то подобного?

Ответы [ 4 ]

8 голосов
/ 31 января 2011

Вы можете установить патчи для обезьяны и вызвать исключение при вызове.Вы могли бы даже точно настроить это с помощью соответствия регулярному выражению в вашей выходной строке (которая выглядит как рекурсивный дамп объекта).

module Kernel
  def puts (s)
    raise "puts called, check the backtrace for the source" if s =~ /#:[a-z0-9]>*/
  end
end

Возможно также, что это не вызов put, а скорее #inspect.

2 голосов
/ 01 февраля 2011

Вы проверили на display?Это еще один метод, который печатает вещи.

1 голос
/ 31 января 2011

Вы можете просмотреть все файлы и найти любые вызовы Kernel.puts, например:

find -iname "*.rb" | xargs grep -iR 'Kernel.puts'

Однако, с точки зрения аккуратности (и эффективности), я бы, наверное, выбрал решениепредоставлено Джеффом Пакетом.

0 голосов
/ 31 января 2011

Это то, что я использую, оно похоже на ответ Бананга, но, возможно, даже проще. Сделайте grep из каталога так:

grep -rn 'Put'.

Конечно, он ищет все, но вы можете запустить его в любом каталоге, который хотите ограничить. Это должно дать вам файл и номер строки, которая вам нужна. Вы можете точно настроить критерии поиска по своему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...