ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: alias_method_chain устарела

Я обновил проект до Rails 5. Когда я запустил rspec, я получил предупреждение

DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. 
From module, you can access the original method using super. 
(called from <top (required)> at /home/alex/projects/myproject/config/application.rb:13)

Строка сбой в application.rb:

Bundler.require(*Rails.groups)

Как узнать, что вызывает это предупреждение, и как избавиться от ошибки?

Ответ 1

Установите (если он уже установлен) ack и запустите в терминале:

ack alias_method_chain /Users/username/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.1/gems/

Он укажет все места, где используется alias_method_chain (файлы и строки кода).

В некоторых драгоценных камнях используется 99%.

См. этот мой ответ для списка вещей, которые вы можете сделать с ним.

Ответ 2

В OSX вы можете использовать:

grep -Ir alias_method_chain `bundle show rails`/..

И это перечислит все драгоценные камни, которые используют alias_method_chain

Ответ 3

Если Gemfile слишком большой, я бы рекомендовал использовать the_silver_searcher для поиска устаревшего alias_method_chain, потому что он быстрее

ag alias_method_chain /path/to/gemset

У меня есть gepgems bash вспомогательная функция, чтобы не вводить /path/to/gemset каждый раз

grepgems alias_method_chain

Чтобы использовать его, добавьте следующую функцию в ваш .bash_profile (или где-нибудь еще в dotfiles, который вам нравится)

function grepgems() {
  ag $1 $GEM_HOME"/gems"
}