web-dev-qa-db-ja.com

Rails 3.2.1にアップグレードした後、ベンダー/プラグインを処理する方法

Rails3.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が答えを見つけることができません。

28
inetufo

私はこれについてブログ投稿を書いたばかりです: 単純な変換方法Rails 2.3 Rails 3.2 のスタイルプラグイン

43
coneybeare

私はこれを調べたところ、いくつかのことを確認するために各プラグインを調べる必要があることがわかりました。

  • それはrubygemsの宝石ですか?もしそうなら、それをあなたのGemfileに貼り付けて、vendor/pluginsから削除してください。
  • 使用可能なgemがない場合、またはgemが古い場合は、vendor/pluginsのフォルダーを取得し、lib/pluginsに移動します。

私が遭遇したことの1つは、それらすべてのプラグインを手動で要求する必要があるということです。これが私が作成して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にある必要があります。

お役に立てれば!

8
siannopollo

他の両方の答えは良く、うまくいくようです。

ただし、プラグインがvendor/plugins /.../ libの下の単一の.rbファイルで構成されており、vendor/plugins /.../init.rbが単なる

require 'pluginname'

次に、単一のファイルをlibディレクトリにコピーし、「yourpluginname」を必要とするファイルをconfig/initializersに追加するだけです。

これは、まだ宝石ではないacts_as_ratedプラグインを使用した具体的な例です。

  1. ベンダー/プラグイン/acts_as_rated/lib/acts_as_rated.rbをlib /にコピーします
  2. 次のファイルconfig/initializers /acts_as_rated.rbを作成します...

    'acts_as_rated'が必要

  3. ベンダー/プラグイン/ acts_as_ratedを削除します

7
Jim Morris

RailtieまたはRails :: Engineへの変換については誰も言及していません。

すべてのRubyファイルをgemに移動するだけです[バンドルgemを使用して、摩擦を最小限に抑えて作成してください]。

次に、Railtieのドキュメントを見て[そしてターゲットを見つけるRailsバージョン]:

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

この方法で古いプラグインinit.rbをrailtieに変換するのは非常に簡単で、Rails 4+へのパスを提供します。

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

Railsプロジェクトではなく、gemでテストの構築を開始してください。

0
Bret Weinraub