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
ディレクトリが空です-参照している別のプラグインディレクトリはありますか?
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にマージされました。
あなたが試すことができます
::ActiveSupport::Deprecation.silenced = true
あなたのproduction.rb
それは単なるノイズだからです。
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
私が見つけた最良のアプローチは、文書化されています here 。これは、doが古いスタイルのプラグインを持っているため、この質問を検索して発見したことを前提としています。
私はまったく宝石ではないの部分に行きました、なぜならカピストラーノの展開中にプラグインをオン/オフにする必要があるからです私が展開していたアプリのフレーバー。 config.pluginsを使用して、使用するプラグインを指定する前。このアプローチでは、代わりにconfig.before_configurationで「require」を使用しています。
単に警告を消すよりもきれいな方法は、ここでできることです。
ロガーインジェクションでは、 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羽の鳥を入れました。
次のモンキーパッチを/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スタイルのプラグインからのすべての非推奨は沈黙されるべきです。その他の非推奨が表示されます。
Herokuはようやくこれに対処したようです。
Injecting plugin 'Rails_log_stdout'
Injecting plugin 'Rails3_serve_static_assets'
Add 'Rails_12factor' gem to your Gemfile to skip plugin injection
非推奨の通知を抑制する新しい方法は次のとおりです。
config.active_support.deprecation = :silence
あなたのconfig/environments/production.rb
ファイル。