Плагіни в 2.3 стилі та попередження про депрекацію виконуються у Heroku


155

Я переходжу до Rails 3.2 і запускаю rake db: migrate дає мені кілька помилок форми:

ПОПЕРЕДЖЕННЯ ПОПЕРЕДЖЕННЯ. У постачальника / плагінів у вас є плагіни у стилі Rails 2.3! Підтримка цих плагінів буде видалено в Rails 4.0. Перемістіть їх і зв’яжіть їх у своєму Gemfile або складіть у свою програму як lib / myplugin / * та config / Initiators / myplugin.rb. Більше про це див . У примітках до випуску: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released . (зателефонував із / app / Rakefile: 7)

Що викликає здивування в тому, що мій vendor/pluginsкаталог порожній - чи існує ще одна директорія плагінів, на яку він посилається?


1
Це було ще більш складною для мене, оскільки я DID мав там речі, але після її видалення все одно переходьте на помилку з Heroku! Велике запитання, чудова відповідь
Phantomwhale

Відповіді:


203

Ви використовуєте Heroku?

Heroku буде вводити плагіни в додатки Rails 3.x. Щоб уникнути цього введення в Rails 3, включіть у свою програму дорогоцінний камінь rails_12factor. ( Підтримка Heroku Ruby 2013-10-26)

Також потрібна дорогоцінний камінь rails_12factor в рейках 4.

Якщо цей дорогоцінний камінь відсутній у вашій програмі, ви отримаєте попередження під час розгортання, і ваші активи та журнали не працюватимуть. ( Рейки 4 на Heroku 2013-10-26)

Нещодавно у 2013-08 роках heroku завжди вводив плагіни в рейки 3 додатків, навіть програми з рекомендованими дорогоцінними каменями. Це було проблемою з рубіновим пакетом, і було виправлено PR 11 , об'єднаною 2013-08-06.


1
Так, я розумію, що всі попередження надходили з моїх сценаріїв та журналів Heroku. Я припускаю, що (а) це введення плагінів та (б), що команда Heroku виправить це, перш ніж це стане актуальною проблемою.
безстрашний_фол

Я новачок, і я трохи застряг у тому, як я редагую залізниці-3.2.0. Чи можете ви допомогти.
Бенджамін

@vezu Я рекомендую не починати. Це було те, що було звичайним, перш ніж ми почали використовувати пакувальник, але зараз це навряд чи вийде, і, ймовірно, просто зламає речі.
Метью Руді

2
Я спробував додати ініціалізатор gist.github.com/1709421, але це не працює (я думаю, плагіни завантажуються раніше, ніж ініціалізатори додатків). Моя пропозиція не хвилюйтесь ... це просто шум.
Метью Руді

3
через рік ... жодної зміни від героїки.
Courtimas

12

Ви можете спробувати

::ActiveSupport::Deprecation.silenced = true

у вашому, production.rbоскільки це просто шум.


5
В ідеалі варто лише придушити це конкретне попередження, чи знаєте ви, чи можливо це?
Вінсент

якщо ви робите це в production.rb, ви повинні побачити помилки в розробці - якщо все інше не вдається встановити навпаки в development.rb
iterion

2
Не пригнічуючи для мене попередження
Леопд

6
Один хак, щоб придушити саме це попередження, - додати наступне в application.rb:ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
Лірон Ягдав

8

у config / environment.rb додати:

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!

Аналогічно для відключення попереджень у рейкових завданнях вставляйте конфігурацію замовчування вгорі верхнього файлу 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

Гм .. це також не зняло моє попередження.
Мартін

Я спочатку передав цю відповідь з двох вищезазначених коментарів, але насправді це спрацювало для мене. Ходові рейки 3.2.6. YMMV.
Ноах Магедман

4

Кращий підхід, який я знайшов, задокументований тут . Це припущення, що ви шукали та знайшли це питання, оскільки це так є плагіни в старому стилі.

Я пішов із програмою Make it not a gem , тому що мені потрібно було ввімкнути / вимкнути плагіни під час мого розгортання capistrano, виходячи з того, який аромат програми я розгортав. Перш ніж я використовував config.plugins, щоб вказати, який плагін використовувати. При такому підході я замість цього використовую "вимагаю" в config.before_configuration.


+1. Я в кінцевому підсумку використовував Метта Конібі, що дає вам гарне посилання для ознайомлення (знайдене на сторінці @yuri, пов’язане) для перетворення моїх простих рейок 2.3 з плагінами на 3.2. Мені це рішення сподобалось, оскільки воно не просто замовчувало попередження, воно фактично їх фіксує.
Єремія

1

Просто вставте наступний патч мавп /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 повинні бути заглушені. З'являться інші анулювання.


1

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

Для введення лісоруба ви можете спробувати використати новий дорогоцінний камінь Heroku, про який Джаред Бек згадав у своїй відповіді вище .

Що ми зробили замість цього:

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

vendor/plugins/rails_log_stdout/readme.md

Метою вбудованого плагіна Heroku для ведення журналу є ввімкнення журналу в стилі Heroku (для цього потрібно, щоб журнали надсилалися в STDOUT, а не у файл). Щоб повернути це, ми зробили те, що я описав у цій відповіді . Налагодження поведінки за замовчуванням Хероку було потрібне для Єдинорога все одно, тож у нас з’явилися дві птиці в одному камені.


Краще додати порожній файл з іменем .gitkeepvendor / plugins / rails_log_stdout .gitkeep- це умова зберігати порожній каталог під час використання git.
tmaier

Досить справедливо, я віддаю перевагу трохи більше багатослівних причин, чому саме тому мені сподобався підхід readme. Ти маєш рацію, хоча .gitkeepце конвенція.
Вольфрам Арнольд

0

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

config.active_support.deprecation = :silence

у вашому config/environments/production.rbфайлі.


3
Також не придушує попередження для мене.
Леопд

0

Схоже, що Хероку нарешті вирішив це.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.