升级到rails 3.2.1后如何处理供应商/插件

ine*_*ufo 28 plugins warnings ruby-on-rails ruby-on-rails-3.2

升级到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

我在plug/plugins目录中移动我的插件,但我不知道如何编写config/initializers/myplugin.rb文件,谷歌找不到答案.

sia*_*llo 8

我刚刚完成了这个,发现你只需要浏览每个插件来检查一些事情:

  • 它是rubygems的宝石吗?如果是这样,只需将其粘贴在您的Gemfile中并从中删除即可vendor/plugins
  • 如果没有可用的宝石,或宝石是旧的,请将文件夹放入vendor/plugins并移动到lib/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
Run Code Online (Sandbox Code Playgroud)

我也遇到了一些插件所需的初始化器问题,所以我将这些特定的初始化器移到了lib/plugins/initializers文件夹中.您必须将它们命名为插件的名称,因此插件的初始化程序my_plugin必须位于文件中lib/plugins/initializers/my_plugin.rb

希望这可以帮助!


Jim*_*ris 7

其他答案都很好,似乎工作.

但是,如果您的插件包含vendor/plugins /.../ lib下的单个.rb文件,那么vendor/plugins /.../ init.rb只是一个

require 'pluginname'
Run Code Online (Sandbox Code Playgroud)

然后,您只需将单个文件复制到lib目录,然后将文件添加到需要'yourpluginname'的config/initializers中

下面是使用acts_as_rated插件的具体示例,该插件还不是gem.

  1. 将vendor/plugins/acts_as_rated/lib/acts_as_rated.rb复制到lib /
  2. 使用以下命令创建文件config/initializers/acts_as_rated.rb ...

    要求'acts_as_rated'

  3. 删除vendor/plugins/acts_as_rated