Tâche d'exécution de plugins de style 2.3 et d'avertissements d'obsolescence dans Heroku

155

Je mets à niveau vers Rails 3.2 et exécuter rake db: migrate me donne plusieurs erreurs de la forme:

AVERTISSEMENT DE DÉPRÉCIATION: Vous avez des plugins de style Rails 2.3 dans le fournisseur / plugins! La prise en charge de ces plugins sera supprimée dans Rails 4.0. Déplacez-les et regroupez-les dans votre Gemfile, ou pliez-les dans votre application en tant que lib / myplugin / * et config / initializers / myplugin.rb. Pour en savoir plus, consultez les notes de publication: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released . (appelé depuis at / app / Rakefile: 7)

Ce qui est déroutant, c'est que mon vendor/pluginsrépertoire est vide - y a-t-il un autre répertoire de plugins auquel il fait référence?

sans peur
la source
1
C'était encore plus pré-flex pour moi car j'avais des trucs là-bas, mais après l'avoir supprimé, l'erreur d'Heroku!
Bonne

Réponses:

203

Utilisez-vous Heroku?

Heroku injectera des plugins dans les applications Rails 3.x .. Pour éviter cette injection dans Rails 3, incluez le gem rails_12factor dans votre application. ( Assistance Heroku Ruby 26/10/2013)

La gemme rails_12factor est également requise dans les rails 4.

Si ce joyau n'est pas présent dans votre application, vous recevrez un avertissement lors du déploiement, et vos actifs et journaux ne seront pas fonctionnels. ( Rails 4 sur Heroku 26/10/2013)

Pas plus tard qu'en 2013-08, heroku injectait toujours des plugins dans les applications Rails 3, même des applications avec les gemmes recommandées. C'était un problème avec le buildpack ruby, et a été corrigé par PR 11 , fusionné le 2013-08-06.

Jared Beck
la source
1
Oui, je me rends compte que tous les avertissements proviennent de mes scripts et journaux Heroku. Je suppose que (a) ce sont les injections de plugin et (b) que l'équipe Heroku résoudra cela avant que cela ne devienne un problème réel.
peurless_fool
Je suis un débutant et je suis un peu coincé sur la façon dont j'édite railties-3.2.0. Peux-tu aider s'il te plait.
Benjamin
@vezu Je vous recommande de ne pas commencer. C'était quelque chose qui était courant avant de commencer à utiliser bundler, mais pour le moment, il est peu probable que cela fonctionne et ne fera probablement que casser des choses.
Matthew Rudy
2
J'ai essayé d'ajouter un initialiseur gist.github.com/1709421 mais cela ne fonctionne pas (je suppose que les plugins sont chargés plus tôt que les initialiseurs d'application). Ma suggestion est ne vous inquiétez pas ... c'est juste du bruit.
Matthew Rudy
3
un an plus tard ... pas de changement par rapport à heroku.
courtsimas
12

Tu peux essayer

::ActiveSupport::Deprecation.silenced = true

dans votre production.rbcar ce n'est que du bruit.

kain
la source
5
Idéalement, on ne supprimerait que cet avertissement particulier, savez-vous si c'est possible?
Vincent
si vous le faites dans production.rb, vous devriez voir les erreurs de développement - si tout le reste échoue, définissez le contraire dans development.rb
iterion
2
Ne pas supprimer les avertissements pour moi
Leopd
6
Un hack pour supprimer cet avertissement consiste à ajouter ce qui suit à application.rb:ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
Liron Yahdav
8

dans config / environment.rb ajoutez:

ActiveSupport::Deprecation.silenced = true 

avant d'initialiser les rails, comme ceci:

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

ActiveSupport::Deprecation.silenced = true                                                                                                                               

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

De même, pour désactiver les avertissements dans les tâches de rake, insérez la configuration de mise en sourdine près du haut de votre Rakefile:

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

ActiveSupport::Deprecation.silenced = true                                                                                                                           

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

Vous pouvez éventuellement envelopper ceci dans un bloc pour ne faire taire que la production:

if ENV['RAILS_ENV'] == "production"
  ActiveSupport::Deprecation.silenced = true
end
Michael Hale
la source
Hmm .. cela n'a pas supprimé mon avertissement non plus.
Martin
J'ai d' abord laissé passer cette réponse b / c de ce qui précède deux commentaires, mais il en fait fait le travail pour moi. Rails de roulement 3.2.6. YMMV.
Noach Magedman
4

La meilleure approche que j'ai trouvée est documentée ici . Ceci est en supposant que vous cherché et trouvé à cette question parce que vous n'avez des plugins de style ancien.

Je suis allé avec la partie Make it not a gem du tout , parce que je devais pouvoir activer / désactiver les plugins pendant mon déploiement de capistrano, en fonction de la saveur de l'application que je déployais. Avant, j'utilisais config.plugins pour spécifier le plugin à utiliser. Avec cette approche, j'utilise plutôt un "require" sur config.before_configuration.

yuяi
la source
+1. J'ai fini par utiliser le Matt Coneybeare qui vous donne un joli lien pas à pas (trouvé dans la page @yuri liée) pour convertir mes plugins simples rails 2.3 en 3.2. J'ai aimé cette solution car elle n'a pas seulement fait taire les avertissements, elle les corrige en fait.
Jérémie
1

Il suffit de mettre le patch de singe suivant dans /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

et l'exigent config/application.rbjuste après avoir exigé des rails:

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

Toutes les dépréciations des plugins de style 2.x doivent être réduites au silence. D'autres dépréciations apparaîtront.

skalee
la source
1

Une manière plus propre que de faire taire les avertissements, voici ce que vous pouvez faire.

Pour l'injection de l'enregistreur, vous pouvez essayer d'utiliser la nouvelle gemme d'Heroku que Jared Beck a mentionnée dans sa réponse ci-dessus .

Ce que nous avons fait à la place, c'est ceci:

Vous pouvez empêcher Heroku d'injecter ses propres plugins si vous avez un répertoire du même nom dans votre vendor/pluginsdossier. Le dossier doit juste exister. Heroku n'injectera alors pas son plugin, et s'il n'y a pas de code, Rails ne s'opposera pas aux avertissements d'obsolescence. Nous venons de mettre un fichier readme expliquant cela dans:

vendor/plugins/rails_log_stdout/readme.md

Le but du plugin injecté de Heroku pour la journalisation est d'activer la journalisation de style Heroku (il nécessite que les journaux soient envoyés à STDOUT, pas à un fichier). Pour récupérer cela, nous avons fait ce que j'ai décrit dans cette réponse . Des ajustements aux comportements par défaut de Heroku étaient de toute façon nécessaires pour Unicorn, nous avons donc obtenu deux oiseaux en une pierre.

Wolfram Arnold
la source
Mieux vaut ajouter un fichier vide nommé .gitkeepà vendor / plugins / rails_log_stdout .gitkeepest une convention pour garder un répertoire vide lors de l'utilisation de git.
tmaier
Assez juste, je préfère un peu plus de verbosité quant aux raisons, c'est pourquoi j'ai aimé l'approche readme. Vous avez raison, c'est .gitkeepune convention.
Wolfram Arnold
0

La nouvelle façon de désactiver les avis d'obsolescence est la suivante:

config.active_support.deprecation = :silence

dans votre config/environments/production.rbdossier.

Jonathan Métillon
la source
3
Je ne supprime pas non plus les avertissements pour moi.
Leopd
0

Il semble qu'Heroku ait enfin résolu ce problème.

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