升级到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文件,谷歌找不到答案。
答案 0 :(得分:43)
答案 1 :(得分:8)
我刚刚经历过这个,发现你只需要浏览每个插件来检查一些事情:
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
我还遇到了一些插件所需的初始化程序问题,所以我将这些特定的初始化程序移到了lib/plugins/initializers
文件夹中。您必须将它们命名为插件的名称,因此my_plugin
插件的初始化程序必须位于文件lib/plugins/initializers/my_plugin.rb
希望这有帮助!
答案 2 :(得分:7)
其他答案都很好,似乎也有效。
但是,如果您的插件包含vendor / plugins /.../ lib下的单个.rb文件,并且vendor / plugins /.../ init.rb只是一个
require 'pluginname'
然后,您只需将单个文件复制到lib目录,然后将文件添加到需要'yourpluginname'
的config / initializers中这是一个使用acts_as_rated插件的具体示例,该插件还不是gem。
使用以下内容创建文件config / initializers / acts_as_rated.rb ...
要求'acts_as_rated'
删除vendor / plugins / acts_as_rated
答案 3 :(得分:0)
没有人提到转换为Railtie或Rails :: Engine。
将所有ruby文件移动到gem中[使用bundle gem创建它以获得最小的摩擦]。
然后看一下Railtie文档[并找到你的目标Rails版本]:
https://apidock.com/rails/v3.2.13/Rails/Railtie
以这种方式将旧插件init.rb转换为铁路很容易,它为您提供了通往Rails 4 +的途径。
获得视图或控制器?,然后使用Rails :: Engine。虽然宝石中的引擎从工作流的角度来看可能很复杂,但将插件转换为一个插件非常简单。
帮自己一个忙,并开始在gem中构建测试,而不是在Rails项目中。