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 154

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, поэтому мы получили двух птиц в одном камне.

новый способ заставить замолчать уведомления об устаревании:

config.active_support.deprecation = :silence

в своем .

похоже, что Heroku наконец-то обратился к этому.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection