2012-02-02 11 views
27

をレールにアップグレードした後に、この警告が発生します。/プラグインrails3.2.1にアップグレードした後3.2.1

あなたは、ベンダー/プラグインでRailsの2.3形式のプラグインを持っています!これらのプラグインのサポートはRails 4.0で削除されます。それらを移動してGemfileにバンドルするか、lib/myplugin/*とconfig/initializers/myplugin.rbとしてアプリケーションにフォールドします。 http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released

私はプラグインをvendor/pluginsディレクトリに移動しますが、config/initializers/myplugin.rbファイルの書き込み方法はわかりません.Googleはその答えを見つけることができません。

答えて

43

私はちょうどこの上でブログの記事を書いた:私はちょうどこれを経て、あなただけのいくつかのことを確認するために、各プラグインを通過する必要がありますことを発見しHow to Convert Simple Rails 2.3 Style Plugins for Rails 3.2

+1

ブログの投稿に感謝します。あなたの優れた指示を使って[gmail_smtp](https://github.com/adamwiggins/gmail_smtp/)に変換しました。それが誰にも役立つ場合、元の 'init.rb'の2行を' require 'smtp_tls'から 'action'mailmail_'を' require File.dirname(__ FILE__)+ '/../ ..に変更しました。/lib/gmail_smtp/smtp_tls''と '' File.dirname(__ FILE__)+ '/../../ lib/gmail_smtp/actionmailer_gmail' 'をそれぞれ必要とします。 – user664833

+0

リンクが死んでいます、あなたは新しい@coneybeareを投稿してください。 –

+0

リンクが動作しません:( –

8

  • はそれが逸品ですrubygemsで?何の宝石が利用できない、または宝石が古い場合は、vendor/pluginsでフォルダを取ると私は全体で走ったlib/plugins

一つのことに移動している場合は、ちょうどあなたのGemfileでそれを固執し、vendor/plugins

  • から削除これらのプラグインをすべて手動で実行する必要があります。ここに私が作成したとconfig/initializers/plugins.rbに配置された初期化子は、次のとおりです。

    Dir[Rails.root.join('lib', 'plugins', '*')].each do |plugin| 
        next if File.basename(plugin) == 'initializers' 
    
        lib = File.join(plugin, 'lib') 
        $LOAD_PATH.unshift lib 
    
        begin 
        require File.join(plugin, 'init.rb') 
        rescue LoadError 
        begin 
         require File.join(lib, File.basename(plugin) + '.rb') 
        rescue LoadError 
         require File.join(lib, File.basename(plugin).underscore + '.rb') 
        end 
        end 
    
        initializer = File.join(File.dirname(plugin), 'initializers', File.basename(plugin) + '.rb') 
        require initializer if File.exists?(initializer) 
    end 
    

    私も、私はプラグインのいくつかのために必要な初期化子の問題を抱えていたので、私はlib/plugins/initializersフォルダにそれらの特定の初期化子を移動しました。プラグインの名前はプラグインの名前にする必要がありますので、my_pluginプラグインのイニシャライザをファイルに保存する必要があります。lib/plugins/initializers/my_plugin.rb

  • +0

    人が宝石のコントローラーをオーバーライドした場合どのようにlibに移動するのですか? –

    7

    他の回答は両方とも良好であり、うまくいくようです。

    あなたのプラグインは、ベンダー/プラグイン/.../ libの下に単一.RBファイルで構成されており、ベンダー/プラグイン/.../ init.rbは、それからちょうど

    require 'pluginname' 
    

    あなたですがあれば単一のファイルをあなたのlibディレクトリにコピーして、 'yourpluginname'を必要とするconfig/initializersにファイルを追加することができます

    ここには宝石ではないacts_as_ratedプラグインを使用した具体的な例があります。 libに/

  • に/ libに/ acts_as_rated.rb acts_as_ratedベンダー/プラグイン/以下でファイルのconfig /初期化子/ acts_as_rated.rbを作成

    1. コピー...

      は 'acts_as_rated' 必要

    2. 削除ベンダー/プラグイン/誰Railtに変換言及していない

  • +0

    ベンダーからlibにssl_requirementを得るためにこのヒントを使いました。 – Nungster

    0

    をacts_as_ratedつまり、Rails :: Engineです。

    すべてのルビファイルを宝石に移動するだけで、摩擦を最小限に抑えて作成できます。

    が続いRailtieのドキュメントを見て、[し、あなたのターゲットを見つけるRailsのバージョン]:

    https://apidock.com/rails/v3.2.13/Rails/Railtie

    それは、ちょうどこのようにrailtieにinit.rb古いプラグインを変換するのは非常に簡単で、それはあなたにRails 4+への道を与えます。

    ビューまたはコントローラを取得したら、代わりにRails :: Engineを使用してください。宝石のエンジンはワークフローの観点から複雑になることがありますが、プラグインを1つに変換するのは非常に簡単です。

    Railsプロジェクトではなく、宝石の中でテストをビルドしてみましょう。