Wtyczki w stylu Railsów 2.3 i ostrzeżenia o przestarzałościach uruchomione zadanie w Heroku


155

Uaktualniam do Railsów 3.2 i uruchamiam rake db: migrate daje mi kilka błędów w formularzu:

OSTRZEŻENIE O DEPRECATION: Masz wtyczki w stylu Railsów 2.3 u dostawcy / wtyczek! Wsparcie dla tych wtyczek zostanie usunięte w Railsach 4.0. Przenieś je i spakuj w swoim pliku Gemfile lub złóż je w swojej aplikacji jako lib / myplugin / * i config / initializers / myplugin.rb. Więcej informacji na ten temat można znaleźć w informacjach o wydaniu: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released . (wywoływane z at / app / Rakefile: 7)

Kłopotliwe jest to, że mój vendor/pluginskatalog jest pusty - czy istnieje inny katalog wtyczek, do którego się odwołuje?


1
Było to dla mnie jeszcze bardziej skomplikowane, ponieważ MIAŁEM tam rzeczy, ale po usunięciu nadal pojawia się błąd z Heroku! Świetne pytanie, świetna odpowiedź
Phantomwhale

Odpowiedzi:


203

Czy używasz Heroku?

Heroku wprowadzi wtyczki do aplikacji Rails 3.x. Aby uniknąć tego iniekcji w Railsach 3, dołącz do aplikacji gem rails_12factor. ( Wsparcie Heroku Ruby 26.10.2013 )

Klejnot rails_12factor jest również wymagany w rails 4.

Jeśli ten klejnot nie jest obecny w Twojej aplikacji, otrzymasz ostrzeżenie podczas wdrażania, a Twoje zasoby i dzienniki nie będą działać. ( Rails 4 w Heroku 2013-10-26)

Jeszcze w 2013-08, heroku zawsze umieszczało wtyczki w aplikacjach rails 3, nawet w aplikacjach z zalecanymi klejnotami. Był to problem z pakietem kompilacji Ruby i został rozwiązany przez PR 11 , scalony 06.08.2013.


1
Tak, zdaję sobie sprawę, że wszystkie ostrzeżenia pochodzą z moich skryptów i dzienników Heroku. Zakładam, że (a) to zastrzyki wtyczek i (b) że zespół Heroku naprawi to, zanim stanie się faktycznym problemem.
Fearless_fool

Jestem nowicjuszem i trochę utknąłem na tym, jak edytować railties-3.2.0. Czy możesz mi pomóc.
Benjamin

@vezu Nie zaczynaj. To było coś, co było powszechne, zanim zaczęliśmy używać bundlera, ale obecnie jest mało prawdopodobne, aby zadziałało i prawdopodobnie po prostu zepsuje.
Matthew Rudy

2
Próbowałem dodać inicjalizator gist.github.com/1709421, ale to nie działa (wydaje mi się, że wtyczki są ładowane wcześniej niż inicjatory aplikacji). Moja sugestia jest taka, że ​​nie martw się ... to tylko hałas.
Matthew Rudy

3
rok później ... bez zmian od heroku.
courimas

12

Możesz spróbować

::ActiveSupport::Deprecation.silenced = true

w twoim, production.rbponieważ to tylko hałas.


5
Idealnie byłoby, gdyby ktoś tylko ukrył to konkretne ostrzeżenie, czy wiesz, czy to możliwe?
Vincent

jeśli zrobisz to w
pliku

2
Nie
tłumię

6
Jeden Hack stłumić tylko to ostrzeżenie jest dodać następujące environment.rb:ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
Liron Yahdav

8

w config / environment.rb dodaj:

ActiveSupport::Deprecation.silenced = true 

przed inicjalizacją szyn, na przykład:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                               

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

Podobnie, aby wyłączyć ostrzeżenia w zadaniach rake, wstaw konfigurację wyciszania w górnej części pliku Rakefile:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                           

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

Możesz opcjonalnie zawinąć to w blok, aby wyciszyć tylko podczas produkcji:

if ENV['RAILS_ENV'] == "production"
  ActiveSupport::Deprecation.silenced = true
end

Hmm… to też nie usunęło mojego ostrzeżenia.
Martin

I początkowo przeszedł tę odpowiedź b / c dwóch powyższych uwag, ale w rzeczywistości nie działa dla mnie. Szyny jezdne 3.2.6. YMMV.
Noach Magedman

4

Najlepsze podejście, jakie znalazłem, jest udokumentowane tutaj . Jest to przy założeniu, że szukał i znalazł na to pytanie, ponieważ roboty mają wtyczek w starym stylu.

Poszedłem z częścią Make it not a gem , ponieważ musiałem mieć możliwość włączania / wyłączania wtyczek podczas wdrażania Capistrano, w zależności od tego, jaki smak wdrażanej aplikacji. Wcześniej użyłem config.plugins, aby określić, jakiej wtyczki użyć. W tym podejściu zamiast tego używam „require” na config.before_configuration.


+1. Skończyło się na tym, że Matt Coneybeare daje ci fajny link do przewodnika (znajdujący się na stronie @yuri link), aby przekonwertować moje proste wtyczki rails 2.3 do 3.2. Podobało mi się to rozwiązanie, ponieważ nie tylko ucisza ostrzeżenia, ale faktycznie je naprawia.
Jeremiah

1

Po prostu umieść następującą łatkę małpy w /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

i wymagaj go config/application.rbzaraz po zażądaniu Railsów:

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

Wszystkie przestarzałe wtyczki w stylu 2.x powinny zostać wyciszone. Pojawią się inne wycofania.


1

Czystszy sposób niż tylko wyciszanie ostrzeżeń, oto co możesz zrobić.

Do wstrzyknięcia loggera możesz spróbować użyć nowego klejnotu Heroku, o którym wspomniał Jared Beck w swojej odpowiedzi powyżej .

Zamiast tego zrobiliśmy to:

Możesz zabronić Heroku wstrzykiwania własnych wtyczek, jeśli masz katalog o tej samej nazwie w swoim vendor/pluginsfolderze. Folder po prostu musi istnieć. Heroku nie wstrzyknie wtedy swojej wtyczki, a jeśli nie ma kodu, Railsy nie będą sprzeciwiać się ostrzeżeniom o wycofaniu. Po prostu umieściliśmy plik readme wyjaśniający to w:

vendor/plugins/rails_log_stdout/readme.md

Celem wtyczki Heroku do logowania jest włączenie logowania w stylu Heroku (wymaga wysyłania logów do STDOUT, a nie do pliku). Aby to odzyskać, zrobiliśmy to, co opisałem w tej odpowiedzi . Jednorożec i tak potrzebował poprawek do domyślnych zachowań Heroku, więc dostaliśmy dwie pieczenie na jednym ogniu.


Lepiej dodać pusty plik o nazwie .gitkeepvendor / plugins / rails_log_stdout .gitkeepto konwencja, aby zachować pusty katalog podczas korzystania z git.
tmaier

W porządku, wolę trochę więcej rozwlekłości, dlaczego, dlatego podobało mi się podejście readme. Masz rację, chociaż to .gitkeepjest konwencja.
Wolfram Arnold

0

Nowy sposób wyciszania powiadomień o wycofaniu to:

config.active_support.deprecation = :silence

w swoim config/environments/production.rbpliku.


3
Nie tłumi też ostrzeżeń za mnie.
Leopd

0

Wygląda na to, że Heroku w końcu się tym zajął.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.