2012-02-02 58 views
27

升級到rails3.2.1後後,此警告出現:如何處理與供應商/插件升級到3.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

我將我的插件,供應商/ plugins目錄,但我不知道該怎麼寫配置/初始化/ myplugin.rb文件,谷歌無法找到答案。

回答

43

我只是寫了這一篇博客文章:How to Convert Simple Rails 2.3 Style Plugins for Rails 3.2

+1

非常感謝您的博客文章!我只是使用你的出色說明成功地轉換了[gmail_smtp](https://github.com/adamwiggins/gmail_smtp/)。爲了幫助任何人,我將原始'init.rb'中的兩行從'require'smtp_tls''和'require'actionmailer_gmail''改爲'require File.dirname(__ FILE__)+'/../ ../lib/gmail_smtp/smtp_tls''和'分別需要File.dirname(__ FILE__)+'/../../ lib/gmail_smtp/actionmailer_gmail'。 – user664833 2012-08-04 02:57:17

+0

鏈接已經死了,你可以發佈一個新的@coneybeare。 – 2017-06-15 07:35:53

+0

鏈接不起作用:( – 2017-07-17 13:16:52

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 

我也有我需要的一些插件的初始化的問題,讓我感動那些特定的初始化爲lib/plugins/initializers文件夾。你必須給它們命名插件的名稱,所以對於my_plugin插件的初始化就必須在文件中lib/plugins/initializers/my_plugin.rb

希望這有助於!

+0

而如果一個人已經重寫了寶石控制器,如何將它移動到lib? – 2013-04-29 06:46:42

7

這兩個答案都很好,似乎工作。

但是,如果你的插件是由供應商下單的.rb文件/插件/.../ lib和供應商/插件/.../ init.rb只是一個

require 'pluginname' 

然後你可以簡單地將單個文件複製到lib目錄,並將文件添加到配置/初始化程序中,這些文件需要'yourpluginname'

下面是一個使用不是gem的acts_as_rated插件的具體示例。

  1. 副本供應商/插件/ acts_as_rated/lib中/ acts_as_rated.rb到LIB/
  2. 創建一個配置文件/初始化/ acts_as_rated.rb以下...

    需要 'acts_as_rated'

  3. 刪除供應商/插件/ acts_as_rated

+0

我使用此技巧從供應商獲得ssl_requirement直到lib。謝謝! – Nungster 2012-11-05 16:30:55

0
沒有

人提到轉換成Railt即或Rails :: Engine。

只需將所有的ruby文件移動到寶石中[使用寶石創建最小摩擦]。

再看看在Railtie文檔[找到你的目標的Rails版本]:

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

這是很容易只是轉換一箇舊插件init.rb到railtie這樣,和它爲您提供了一條通往Rails 4+的途徑。

得到視圖或控制器?,然後使用Rails ::引擎。儘管從工作流的角度來看,寶石中的引擎可能很複雜,但將插件轉換爲一個非常簡單。

幫你一個忙,開始在gem而不是在Rails項目中建立測試。