After upgrading to rails3.2.1,this warning occurs:
You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them
No one has mentioned converting to a Railtie or Rails::Engine.
Just move all of your ruby files into a gem [use bundle gem to create it for minimal friction].
Then have a look at the Railtie docs [and find your target Rails version]:
https://apidock.com/rails/v3.2.13/Rails/Railtie
It's quite easy to just convert an old plugin init.rb to a railtie in this way, and it gives you a pathway to Rails 4+.
Got views or controllers?, then use a Rails::Engine instead. While engines in gems can be complicated from a workflow standpoint, converting a plugin to one is pretty trivial.
Do yourself a favor and start building tests right in the gem, instead of in the Rails project.
both the other answers are good and seem to work.
However if your plugin consists of a single .rb file under vendor/plugins/.../lib and the vendor/plugins/.../init.rb is just a
require 'pluginname'
Then you can simply copy the single file to your lib directory and add a file to config/initializers that does a require 'yourpluginname'
Here is a concrete example using the acts_as_rated plugin which is not a gem yet.
copy vendor/plugins/acts_as_rated/lib/acts_as_rated.rb to lib/
create a file config/initializers/acts_as_rated.rb with the following...
require 'acts_as_rated'
delete vendor/plugins/acts_as_rated
I just wrote a blog post on this: How to Convert Simple Rails 2.3 Style Plugins for Rails 3.2
I just went through this and found that you just have to go through each plugin to check a few things:
vendor/plugins
vendor/plugins
and move it to lib/plugins
One thing I ran across is that you then need to require all those plugins manually. Here is the initializer I created and placed in 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
I also had the problem of initializers I needed for some of the plugins, so I moved those particular initializers into the lib/plugins/initializers
folder. You have to name them the name of the plugin, so an initializer for the my_plugin
plugin would have to be in the file lib/plugins/initializers/my_plugin.rb
Hope this helps!