Предупреждения об устаревании в Rails 5

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

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 /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
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 /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)

Когда я проверяю строку 5 config/environment.rb, есть этот код:

Rails.application.initialize!

Когда я ищу в своем репозитории after_action, after_filter или alias_method_chain, он не найден. Что я могу сделать, чтобы избавиться от этих предупреждений?


person John    schedule 06.10.2016    source источник
comment
Вероятно, он используется внутри драгоценного камня, взгляните на все свои драгоценные камни и посмотрите, не использует ли его какой-либо из них.   -  person Doon    schedule 06.10.2016
comment
+1 Doon, Вы недавно обновили пакет, чтобы убедиться, что у вас есть последние драгоценные камни. Многие гемы пока официально не поддерживают rails 5.   -  person ilan berci    schedule 06.10.2016
comment
Все гемы обновляются после обновления до Rails 5. Как определить, из какого гема он может исходить?   -  person John    schedule 06.10.2016
comment
вы можете grep через свой репозиторий драгоценных камней   -  person ilan berci    schedule 06.10.2016
comment
Вы также можете безопасно игнорировать его, так как ваша зависимость от драгоценных камней растет, и практически невозможно сохранить список предупреждений чистым.   -  person ilan berci    schedule 06.10.2016
comment
Игнорировать эти предупреждения — не хорошая идея. Я работал над приложениями, которые перешли из Rails 2-5 без каких-либо предупреждений.   -  person Nick Tomlin    schedule 15.06.2017


Ответы (2)


Почему

Я столкнулся с alias_method_chain is deprecated ... from <top (required)> at /path/to/your/environment.rb в недавнем обновлении Rails 5. Обычно это указывает на использование в геме, требуемом во время вызова initialize! в вашем приложении Rails, или Bundler.require, если вы вручную запрашиваете свои зависимости (как это случилось со мной).

Это, вероятно, лучше выразить как:

Один из случайных Gems, от которых вы зависите, сделал что-то, что мне не понравилось, во время инициализации Rails. Удачи найти его!

Как это исправить (возможно)

Вот несколько простых шагов, которые я выполнил, чтобы разобраться с этими неизвестными ошибками:

  1. Find you gem path
    • You can typically use the parent directory of bundle show rails or $GEM_PATH to figure out where the gems for your bundle currently live (do note that this may be different for gems from different sources, e.g. git dependencies are stored differently than those from rubygems)
  2. Используйте свой любимый инструмент текстового поиска (grep, ripgrip ag) для поиска имени устаревшего метода, например. rg "alias_method_chain" <gem path>
  3. Обновите или удалите этот драгоценный камень, чтобы увидеть, исчезнет ли устаревание.
  4. Надеюсь, это так!

В моем случае предупреждение об устаревании для alias_method_chain было в устаревшей версии Kaminari. Я обновил свой Gemfile, чтобы использовать более новую версию, а затем запустил bundle update kaminari, чтобы отсортировать его.

В стороне

Игнорировать эти предупреждения — очень плохая идея; легко допустить, чтобы подобные мелочи просочились в ваше приложение, если они не оказывают непосредственного влияния. Это приводит к нормализации поведения игнорирования предупреждений или ошибок; это означает больше ошибок и несоответствий в вашем приложении, и гарантированные неудачи, когда вы пытаетесь обновиться до версии rails, которая устраняет устаревшее поведение. Если вы или ваша команда устанавливаете стандарт немедленного обнаружения и устранения этих ошибок, то легко обнаружить и решить настоящие проблемы, когда они возникнут. Ваш будущий я скажет вам спасибо :)

person Nick Tomlin    schedule 15.06.2017

Недавно я столкнулся с этой же ошибкой. Получил эту ошибку примерно через 2 минуты после создания нового приложения Rails 5. Едва я начал следующий руководство по диаграммам, как получил ту же ошибку.

Порядок работы

  1. модель rails g Посетите страну: строка Visit_at: datetime load_time: десятичное число
  2. грабли базы данных: миграция
  3. BOOM! получил ту же ошибку, и это не позволило мне продолжить создание моей схемы.

Ошибка: 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 richOnRails/chartkick/config/application.rb:7) rake aborted!

В сообщении об ошибке упоминалась проблема в строке 7 файла config/application.rb, как показано ниже:

require_relative 'boot'
require 'rails/all'

**Bundler.require(*Rails.groups)**
module Chartkick
    class Application < Rails::Application
    end
end

Строка 7: Bundler.require(*Rails.groups) *звездочки используются для обозначения строки 7.

Я не видел ничего действительно плохого в строке 7.


Пытался решить это с помощью следующих команд:

  • bundle exec rake db:migrate [такая же ошибка]

  • обновление пакета

Наконец, решил часть проблемы, вызвав ошибку - со следующим кодом:

bin/rake db:create

rake db:migrate

У меня все еще есть то же сообщение об ошибке, но теперь я могу использовать и получать доступ к своей базе данных. Ошибка, по-видимому, все еще присутствует, но она больше не мешает моему прогрессу. Я также должен отметить, что мое новое приложение для рельсов было создано с использованием базы данных postgresql по умолчанию.

rails new chartkick --database=postgresql

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

person Seattler    schedule 22.01.2017