web-dev-qa-db-fra.com

Rails plugins de style 2.3 et avertissements de dépréciation en cours d'exécution dans Heroku

Je passe à Rails 3.2, et l'exécution de rake db: migrate me donne plusieurs erreurs de forme:

AVERTISSEMENT DE DÉPRÉCIATION: Vous avez Rails 2.3 plugins de style dans le fournisseur/plugins! Le support de ces plugins sera supprimé 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. Voir les notes de version pour plus d'informations à ce sujet: http://weblog.rubyonrails.org/2012/01/04/Rails-3-2-0-rc2-a-été-publié . (Appelé depuis at/app/Rakefile: 7)

Ce qui est troublant, c'est que mon vendor/plugins le répertoire est vide - existe-t-il un autre répertoire de plugins auquel il fait référence?

155
fearless_fool

Utilisez-vous Heroku?

Heroku injectera des plugins dans les applications Rails 3.x .. Pour éviter cette injection dans Rails 3, incluez la gemme Rails_12factor dans votre application. ( Heroku Ruby Support 2013-10-26)

La gemme Rails_12factor est également requise dans 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 Herok 2013-10-26)

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

203
Jared Beck

Tu peux essayer

::ActiveSupport::Deprecation.silenced = true

dans votre production.rb puisque c'est juste du bruit.

12
kain

dans config/environment.rb, ajoutez:

ActiveSupport::Deprecation.silenced = true 

avant d'initialiser 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 râteau, insérez la configuration de silence en haut de votre fichier râteau:

# 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 cela dans un bloc pour ne faire taire qu'en production:

if ENV['Rails_ENV'] == "production"
  ActiveSupport::Deprecation.silenced = true
end
8
Michael Hale

La meilleure approche que j'ai trouvée est documentée ici . Cela suppose que vous avez recherché et trouvé cette question parce que vous avez des plugins à l'ancienne.

Je suis allé avec la partie Ne pas en faire un joyau du tout , car je devais pouvoir activer/désactiver les plugins pendant mon déploiement de capistrano, basé sur quelle 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.

4
yuяi

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

Pour l'injection de l'enregistreur, vous pouvez essayer d'utiliser le nouveau joyau de Herok que Jared Beck mentionné dans sa réponse ci-dessus .

Ce que nous avons fait à la place est le suivant:

Vous pouvez empêcher Heroku d'injecter ses propres plugins si vous avez un répertoire du même nom dans votre vendor/plugins dossier. Le dossier doit simplement exister. Heroku n'injectera alors pas son plugin, et s'il n'y a pas de code, Rails ne s'opposera pas aux avertissements de dépréciation. Nous mettons juste un fichier readme expliquant ceci 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 eu deux oiseaux dans une pierre.

1
Wolfram Arnold

Mettez simplement 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'exiger dans config/application.rb juste après avoir exigé 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.

1
skalee

Il semble que Heroku ait finalement 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
0
raidfive

La nouvelle façon de faire taire les avis de dépréciation est la suivante:

config.active_support.deprecation = :silence

dans votre config/environments/production.rb fichier.

0