2012-01-16 9 views
1

Rails 2とRails 3の両方をサポートする宝石があるかどうか疑問に思っていますか?もしそうなら、彼らはどのようにそれをしますか?コード内の簡単な条件式は? Rails 2とRails 3の両方をgemでサポート

この

は、私の前の質問に関連している: Packaging Rails 2.3 Models

当社のWebアプリケーションは、Railsの2であるが、簡単だろう両者の間に、すでにいくつかのマイナーな非互換性があり、新たなAPIアプリはRailsの3になるだろうリリーススクリプトを使用して修正するか、実行時条件付きで修正します。

[編集] 最終的には、APIサーバーとAppサーバーの両方をRails 3上で実行する予定ですので、これは暫定的なものです。私の現在の考え方は、if-defソリューションが最もシンプルで簡単な方法かもしれないということです。 (参照:http://www.infoq.com/presentations/Simple-Made-Easy

答えて

1

Rails 2と3の間に若干の違いがある場合(名前が変更されたメソッドなど)、いくつかの条件でうまくいくはずです。ここでHAMLレールからan example

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

あなたは大きな違いがある場合は、二つの別々の宝石を維持する必要があります。たとえば、will_paginateには、Rails 2および2.3用のバージョンが2.3、Rails 3用のものがあります。これは、アクティブレコード3の主要なリファクタリングのためです.3番目のバージョンのみが開発中です。 mygem(コア)、mygem-rails2、mygem-rails3:あなたはまた、3つの宝石を検討する必要があります2つのバージョンを維持する必要がある場合はその場合

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

。後者の2つはコアに依存し、同じレール独立コードを再利用します。

+0

恐ろしい答え。ありがとう! – GrooveStomp

関連する問題