Rails 2.3-стиль плагинов и предупреждения о предупреждениях, выполняемые в Heroku

Я обновляюсь до Rails 3.2 и запускаю rake db: migrate дает мне несколько ошибок формы:

ПРЕДУПРЕЖДЕНИЕ: У вас есть плагины с плагинами в стиле Rails 2.3 в поставщиках/плагинах! Поддержка этих плагинов будет удалена в Rails 4.0. Выдвиньте их и соедините их в своем Gemfile или добавьте их в свое приложение как lib/myplugin/* и config/initializers/myplugin.rb. Подробнее см. Примечания к выпуску: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (вызывается из /app/Rakefile: 7)

Какое недоумение состоит в том, что мой каталог vendor/plugins пуст - есть ли другой каталог плагинов, на который он ссылается?

Ответ 1

Вы используете Heroku?

Heroku будет внедрять плагины в приложениях Rails 3.x. Чтобы избежать этого инъекции в Rails 3, включают камень rails_12factor в вашем выражение. (Поддержка Heroku Ruby 2013-10-26)

Драйвер rails_12factor также требуется в рельсах 4.

Если этот камень не присутствует в вашем приложении, вы получите предупреждение при развертывании, а ваши активы и журналы не будут функциональны. (Rails 4 на Heroku 2013-10-26)

Совсем недавно, как 2013-08, героику всегда вводили плагины в rails 3 приложения, даже приложения с рекомендованными драгоценными камнями. Это было проблемой с ruby ​​buildpack, и был исправлен PR 11, объединенный в 2013-08-06.

Ответ 2

Вы можете попробовать

::ActiveSupport::Deprecation.silenced = true

в вашем production.rb, так как это просто шум.

Ответ 3

в config/environment.rb add:

ActiveSupport::Deprecation.silenced = true 

перед инициализацией рельсов, например:

# 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

Ответ 4

Лучший подход, который я нашел, документирован здесь. Это предполагает, что вы искали и находили этот вопрос, потому что у вас do есть плагины старого стиля.

Я пошел с Сделать это не неотъемлемой частью, потому что мне нужно было включить/выключить плагины во время моего развертывания в capistrano, исходя из того, какой вкус приложения, которое я развертывал, Прежде чем я использовал config.plugins, чтобы указать, какой плагин использовать. При таком подходе я использую "require" вместо config.before_configuration.

Ответ 5

Просто поставьте следующий патч обезьяны в /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 сразу после запроса Rails:

require 'rails/all'
require File.expand_path('../../lib/silence_heroku_warnings', __FILE__)

Все отклонения от плагинов 2.x-стиля должны быть отключены. Появятся другие отклонения.

Ответ 6

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

Для инъекции регистратора вы можете попробовать новый драгоценный камень Heroku, который Джаред Бек упоминается в его ответе выше.

Вместо этого мы сделали следующее:

Вы можете запретить Heroku вводить свои собственные плагины, если у вас есть каталог с тем же именем в вашей папке vendor/plugins. Папка просто должна существовать. Тогда Heroku не будет вводить свой плагин, и если кода нет, Rails не будет возражать против предупреждений об отказе. Мы просто поместили файл readme, объясняющий это следующим образом:

vendor/plugins/rails_log_stdout/readme.md

Назначение плагина, предназначенного для ввода протоколов Heroku для включения в журнал, - включить ведение журнала в стиле Героку (для этого требуется, чтобы журналы отправлялись в STDOUT, а не в файл). Чтобы получить это, мы сделали то, что я описал в этом ответе. В любом случае для Единорога были необходимы настройки поведения по умолчанию Героку, поэтому у нас было две птицы в одном камне.

Ответ 7

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

config.active_support.deprecation = :silence

в вашем файле config/environments/production.rb.

Ответ 8

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

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