How to deal with vendor/plugins after upgrading to rails 3.2.1
I just went through this and found that you just have to go through each plugin to check a few things:
- Is it a gem on rubygems? If so, just stick it in your Gemfile and delete from
vendor/plugins
- If no gem is available, or the gem is old, take the folder in
vendor/plugins
and move it tolib/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!
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