web-dev-qa-db-ja.com

Rails 2.3スタイルのプラグインと、Herokuでタスクを実行する非推奨の警告

Rails 3.2にアップグレードしています。rakedb:migrateを実行すると、次の形式のエラーが発生します。

廃止の警告:ベンダー/プラグインにRails 2.3スタイルのプラグインがあります。これらのプラグインのサポートはRails 4.0で削除されます。 Gemfileで、またはlib/myplugin/*およびconfig/initializers/myplugin.rbとしてアプリに組み込みます。詳細については、リリースノートを参照してください: http://weblog.rubyonrails.org/2012/01/04/Rails-3-2-0-rc2-has-been-released 。(/ app/Rakefile:7から呼び出されます)

困惑しているのは、私のvendor/pluginsディレクトリが空です-参照している別のプラグインディレクトリはありますか?

155
fearless_fool

Herokuを使用していますか?

Herokuは、プラグインをRails 3.xアプリケーションに挿入します。このRails 3に注入を回避するには、アプリケーションにRails_12factor gemを含めます。( Heroku Rubyサポート 2013-10-26)

Rails_12factor gemは、Rails 4。

このgemがアプリケーションに存在しない場合、デプロイ中に警告が表示され、アセットとログは機能しません。 ( Herokuのレール4 2013-10-26)

2013-08にようやく、herokuは常にプラグインをRails 3アプリ、推奨されるgemを備えたアプリでも挿入しました。これはRuby buildpack、 PR 11 で修正され、2013-08-06にマージされました。

203
Jared Beck

あなたが試すことができます

::ActiveSupport::Deprecation.silenced = true

あなたのproduction.rbそれは単なるノイズだからです。

12
kain

config/environment.rbに以下を追加します。

ActiveSupport::Deprecation.silenced = true 

railsを初期化する前に、次のようにします。

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

ActiveSupport::Deprecation.silenced = true                                                                                                                               

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

同様に、rakeタスクの警告を無効にするには、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
8
Michael Hale

私が見つけた最良のアプローチは、文書化されています here 。これは、doが古いスタイルのプラグインを持っているため、この質問を検索して発見したことを前提としています。

私はまったく宝石ではないの部分に行きました、なぜならカピストラーノの展開中にプラグインをオン/オフにする必要があるからです私が展開していたアプリのフレーバー。 config.pluginsを使用して、使用するプラグインを指定する前。このアプローチでは、代わりにconfig.before_configurationで「require」を使用しています。

4
yuяi

単に警告を消すよりもきれいな方法は、ここでできることです。

ロガーインジェクションでは、 Herokuの新しいgem を使用することができます Jared Beck上記の返信 で言及されています。

私たちが代わりにしたことはこれです:

vendor/pluginsフォルダーに同じ名前のディレクトリがある場合、Herokuが独自のプラグインを挿入することを禁止できます。フォルダーが存在する必要があります。 Herokuはプラグインを挿入しません。コードがない場合、Railsは非推奨の警告に反対しません。これを説明するreadmeファイルを次のように配置します。

vendor/plugins/Rails_log_stdout/readme.md

Herokuのロギング用に挿入されたプラグインの目的は、Herokuスタイルのロギングを有効にすることです(ログをファイルではなくSTDOUTに送信する必要があります)。それを取り戻すために、 this answer で説明したことを行いました。とにかく、UnicornにはHerokuのデフォルトの動作を微調整する必要があったため、1つの石に2羽の鳥を入れました。

1
Wolfram Arnold

次のモンキーパッチを/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

railsを要求した直後にconfig/application.rbで要求します:

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

2.xスタイルのプラグインからのすべての非推奨は沈黙されるべきです。その他の非推奨が表示されます。

1
skalee

Herokuはようやくこれに対処したようです。

   Injecting plugin 'Rails_log_stdout'
   Injecting plugin 'Rails3_serve_static_assets'
   Add 'Rails_12factor' gem to your Gemfile to skip plugin injection
0
raidfive

非推奨の通知を抑制する新しい方法は次のとおりです。

config.active_support.deprecation = :silence

あなたのconfig/environments/production.rbファイル。

0