Rails 2.3-Плагины стиля и предупреждения об устаревании запущенная задача в Heroku
я обновляюсь до Rails 3.2, и запуск rake db: migrate дает мне несколько ошибок вида:
предупреждение об устаревании: у вас есть плагины Rails 2.3-style в vendor / plugins! Поддержка этих плагинов будет удалена в Rails 4.0. Переместите их и упакуйте в свой Gemfile или сложите их в свое приложение как lib/myplugin/* и config/initializers/myplugin.рубидий. См. примечания к выпуску для получения дополнительной информации об этом: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (вызывается из at / app / Rakefile: 7)
что озадачивает, что мой vendor/plugins
каталог пуст -- есть ли другой каталог плагинов, на который он ссылается?
8 ответов:
вы используете Heroku?
Heroku будет вводить плагины в Rails 3.х приложений .. Избегать этого впрыска в рельсы 3, включает самоцвет rails_12factor в вашем приложение. ( Поддержка Heroku Ruby 2013-10-26)
драгоценный камень rails_12factor также требуется в rails 4.
Если этот камень не в вашем приложении, вы получите предупреждение при развертывании, а ваши активы и журналы не будут функциональная. (рельсы 4 на Heroku 2013-10-26)
еще в 2013-08 годах heroku всегда вводил плагины в приложения rails 3, даже приложения с рекомендуемыми драгоценными камнями. Это была проблема с ruby buildpack, и была исправлена пр 11, слившись на 2013-08-06.
Вы можете попробовать
::ActiveSupport::Deprecation.silenced = true
в своем
production.rb
так это просто шум.
в config/среды.РБ добавить:
ActiveSupport::Deprecation.silenced = true
перед инициализацией rails, например:
# Load the rails application require File.expand_path('../application', __FILE__) ActiveSupport::Deprecation.silenced = true # Initialize the rails application MyApp::Application.initialize!
аналогично отключению предупреждений в задачах rake вставьте конфигурацию отключения звука в верхней части вашего Rakefile:
# Load the rails application require File.expand_path('../application', __FILE__) ActiveSupport::Deprecation.silenced = true # Initialize the rails application MyApp::Application.initialize!
вы можете дополнительно обернуть это в блок, чтобы только молчать в производстве:
if ENV['RAILS_ENV'] == "production" ActiveSupport::Deprecation.silenced = true end
лучший подход, который я нашел, задокументирован здесь. Это предполагает, что вы искали и нашли этот вопрос, потому что вы do есть плагины старого стиля.
с сделать это не камень вообще. часть, потому что мне нужно было включить/выключить Плагины во время моего развертывания capistrano, основываясь на том, какой вкус приложения я развертывал. Прежде чем я использовал config.плагины, чтобы указать, какой плагин использовать. При таком подходе я использую "требуют" на конфиг.вместо этого before_configuration.
просто поместите следующий патч обезьяны в
/lib/silence_heroku_warnings.rb
module Rails class Plugin < Engine alias :not_silenced_initialize :initialize def initialize(root) ActiveSupport::Deprecation.silence{ self.send :not_silenced_initialize, root } end end end
и в
config/application.rb
сразу после требования рельсов:require 'rails/all' require File.expand_path('../../lib/silence_heroku_warnings', __FILE__)
все устаревания от 2.Плагины x-стиля должны быть отключены. Другие устаревания будут отображаться.
более чистый способ, чем просто глушить предупреждения, вот что вы можете сделать.
для инъекции регистратора вы можете попробовать использовать в Heroku камень это Джаред Бек упомянутые в его ответ выше.
вместо этого мы сделали следующее:
Вы можете запретить Heroku вводить свои собственные плагины, если у вас есть каталог с тем же именем в вашем
vendor/plugins
папка. Папка просто должна существовать. Heroku тогда не будет вводить его плагин, и если нет кода, Rails не будет возражать с предупреждениями об устаревании. Мы просто помещаем файл readme, объясняющий это:vendor/plugins/rails_log_stdout/readme.md
цель встроенного плагина Heroku для ведения журнала-включить ведение журнала в стиле Heroku (он требует, чтобы журналы отправлялись в STDOUT, а не в файл). Чтобы сделать это, мы сделали то, что я описал в ответ. В любом случае, настройки поведения по умолчанию Heroku были необходимы для Unicorn, поэтому мы получили двух птиц в одном камне.