2012-01-16 59 views
1

我想知道是否有任何支持Rails 2和Rails 3的寶石?如果是這樣,他們是如何做到的?代碼中的簡單條件?支持兩個Rails 2和Rails 3的寶石

這涉及到我剛纔的問題: Packaging Rails 2.3 Models

我們的web應用程序是on Rails的2,但新的API的應用程序將是Rails的3.有兩個,這將是很容易之間已經有一些小的不兼容使用發佈腳本或運行時條件進行修復。

我們計劃最終同時在Rails 3上運行API服務器和應用程序服務器,所以這是暫時的。我目前的想法是,if-def解決方案可能是最簡單和最簡單的解決方案。 (請參閱:http://www.infoq.com/presentations/Simple-Made-Easy

回答

1

如果您在Rails 2和3(例如重命名的方法)之間有一些細微的差異,那麼您應該適當地使用一些條件。下面是Haml的護欄

if ::Rails.version.to_f >= 3.1 
    config.app_generators.template_engine :haml 
    else 
    config.generators.template_engine :haml 
    end 

如果你有,你應該保持兩個獨立的寶石主要區別an example。例如,will_paginate由於在Active Record 3中進行了重大重構,因此Rails 2的版本爲2.3,Rails 3的版本爲3.0。只有第三版本正在開發中。

Record.find(:all, :conditions => { :foo => 'bar' }, :limit => 5) # Rails 2 
Record.where(:foo => 'bar').limit(5) # Rails 3 

在,如果你要保持你也可以考慮3顆寶石兩個版本的話:mygem(核心),mygem-rails2,mygem-Rails3中。後兩者將取決於核心並重用相同的獨立於軌道的代碼。

+0

真棒回答。謝謝! – GrooveStomp 2012-01-17 00:37:38