Plugin Rails 2.3 e avvisi di deprecazione che eseguono attività in Heroku


155

Sto eseguendo l'aggiornamento a Rails 3.2 e sto eseguendo rake db: migrate mi dà diversi errori del modulo:

AVVISO DI DEPRECAZIONE: Hai plug-in stile Rails 2.3 in fornitore / plug-in! Il supporto per questi plugin verrà rimosso in Rails 4.0. Spostali e raggruppali nel tuo Gemfile o piegali nella tua app come lib / myplugin / * e config / initializer / myplugin.rb. Vedi le note di rilascio per ulteriori informazioni al riguardo: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released . (chiamato da / app / Rakefile: 7)

La cosa sconcertante è che la mia vendor/pluginsdirectory è vuota - c'è un'altra directory di plugin a cui fa riferimento?


1
È stato ancora più preplexing per me dato che ho fatto cose lì, ma dopo averlo rimosso va ancora l'errore da Heroku! Grande domanda, ottima risposta
Phantomwhale,

Risposte:


203

Stai usando Heroku?

Heroku inietterà plugin nelle applicazioni Rails 3.x. Per evitare questa iniezione in Rails 3, includi la gemma rails_12factor nella tua applicazione. ( Supporto per Heroku Ruby 26/10/2013)

La gemma rails_12factor è richiesta anche nelle rotaie 4.

Se questo gioiello non è presente nella tua applicazione, riceverai un avviso durante la distribuzione e le risorse e i registri non funzioneranno. ( Rails 4 su Heroku 2013-10-26)

Fino al 2013-08, heroku ha sempre iniettato plug-in nelle app Rails 3, anche nelle app con le gemme consigliate. Questo era un problema con il rubpack buildpack ed è stato risolto da PR 11 , unito il 2013-08-06.


1
Sì, mi rendo conto che tutti gli avvertimenti provenivano dai miei script e registri Heroku. Presumo che (a) siano le iniezioni del plug-in e (b) che il team di Heroku lo risolverà prima che diventi un vero problema.
fearless_fool,

Sono un novizio e sono un po 'bloccato su come modifico railties-3.2.0. Potete per favore aiutare.
Benjamin,

@vezu ti consiglio di non iniziare. Questo era qualcosa che era comune prima di iniziare a usare il bundler, ma in questo momento è improbabile che funzioni e probabilmente romperà le cose.
Matthew Rudy,

2
Ho provato ad aggiungere un inizializzatore gist.github.com/1709421 ma non funziona (suppongo che i plug-in siano stati caricati prima degli inizializzatori dell'app). Il mio consiglio è di non preoccuparti ... è solo rumore.
Matthew Rudy,

3
un anno dopo ... nessun cambiamento da heroku.
cortei

12

Puoi provare

::ActiveSupport::Deprecation.silenced = true

nel tuo production.rbpoiché è solo rumore.


5
Idealmente si dovrebbe solo sopprimere questo particolare avvertimento, sai se è possibile?
Vincent

se lo fai in production.rb dovresti vedere gli errori nello sviluppo - se tutto il resto fallisce
metti

2
Non sopprimendo gli avvertimenti per me
Leopd,

6
Un trucco per sopprimere solo questo avviso è aggiungere quanto segue a application.rb:ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
Liron Yahdav

8

in config / environment.rb aggiungi:

ActiveSupport::Deprecation.silenced = true 

prima di inizializzare le guide, in questo modo:

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

ActiveSupport::Deprecation.silenced = true                                                                                                                               

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

Allo stesso modo per disabilitare gli avvisi nelle attività di rake inserisci la configurazione di silenziamento nella parte superiore del tuo Rakefile:

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

ActiveSupport::Deprecation.silenced = true                                                                                                                           

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

Puoi opzionalmente avvolgerlo in un blocco per mettere a tacere solo in produzione:

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

Hmm .. neanche questo ha rimosso il mio avvertimento.
Martin,

Inizialmente ho trasmesso questa risposta in b / c dei due commenti precedenti, ma in realtà ha funzionato per me. Running Rails 3.2.6. YMMV.
Noach Magedman,

4

L'approccio migliore che ho trovato è documentato qui . Ciò presuppone che si cercato e trovato questa domanda, perché si fare avere i plugin vecchio stile.

Sono andato con Make it not a gemme , perché dovevo essere in grado di attivare / disattivare i plug-in durante la distribuzione di Capistrano, in base al tipo di app che stavo distribuendo. Prima ho usato config.plugins per specificare quale plugin usare. Con questo approccio sto usando invece un "requisito" su config.before_configuration.


+1. Ho finito con l'uso di Matt Coneybeare per darti un bel link walkthrough (che trovi nella pagina @yuri link) per convertire i miei semplici plugin 2.3 di rail in 3.2. Questa soluzione mi è piaciuta perché non ha solo messo a tacere gli avvisi, ma li ha risolti.
Geremia,

1

Basta inserire la seguente patch di scimmia in /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

e richiedilo config/application.rbsubito dopo aver richiesto Rails:

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

Tutte le deprecazioni dai plugin in stile 2.x dovrebbero essere messe a tacere. Verranno visualizzati altri ammortamenti.


1

Un modo più semplice di mettere a tacere gli avvisi, ecco cosa puoi fare.

Per l'iniezione del logger puoi provare a usare la nuova gemma di Heroku che Jared Beck ha menzionato nella sua risposta sopra .

Quello che abbiamo fatto invece è questo:

Puoi impedire a Heroku di iniettare i suoi plugin se hai una directory con lo stesso nome nella tua vendor/pluginscartella. La cartella deve solo esistere. Heroku quindi non inietterà il suo plugin, e se non c'è codice, Rails non si opporrà con avvisi di deprecazione. Abbiamo appena messo un file readme che spiega questo in:

vendor/plugins/rails_log_stdout/readme.md

Lo scopo del plug-in iniettato di Heroku per la registrazione è di attivare la registrazione in stile Heroku (richiede che i registri vengano inviati a STDOUT, non a un file). Per riaverlo, abbiamo fatto quello che ho descritto in questa risposta . Ad ogni modo, per Unicorno erano necessarie modifiche ai comportamenti predefiniti di Heroku, quindi abbiamo preso due piccioni in una fava.


Meglio aggiungere un file vuoto chiamato .gitkeepvendor / plugins / rails_log_stdout .gitkeepè una convenzione per mantenere una directory vuota quando si usa git.
martedì

Abbastanza giusto, preferisco un po 'più di verbosità sul perché, ecco perché mi è piaciuto l'approccio readme. Hai ragione, anche se questa .gitkeepè una convenzione.
Wolfram Arnold,

0

Il nuovo modo di mettere a tacere gli avvisi di deprecazione è:

config.active_support.deprecation = :silence

nel tuo config/environments/production.rbfile.


3
Inoltre, non sopprimere gli avvisi per me.
Leopd,

0

Sembra che Heroku abbia finalmente affrontato questo problema.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.