2012-04-12 5 views
0

私のチームは、JRuby On Railsアプリケーションで共同作業するRailsとJava開発者で構成されています。 Railsの人々は、純粋なRubyインタプリタを使用してフロントエンドアプリケーションを開発することを好みます。 Javaの人々はアプリケーションをTomcatにデプロイし、それをSpringおよびコアJavaバックエンドサービスと統合します。JRuby On RailsアプリケーションをRailsとJavaの両方の開発者に適したパターンにする

純粋なRubyインタプリタを使用してRailsのフェローがプロジェクトを開発できるようにするために、どのバージョンのプロジェクトを実行しているのかを認識します。 Gemfileため

module MyWebApp 
    class Application < Rails::Application 
    def config.database_configuration 
     config = super 
     if defined? JRUBY_VERSION 
     config["development"]["adapter"]="jdbcsqlite3" 
     end 
     config 
    end 
    end 
end 

同じ:

class DocumentServiceFactory 
    def build 
    if defined? JRUBY_VERSION 
     spring_context :document_service 
    else 
     mock :document_service 
    end 
    end 
end 

このソリューションの作品:

gem 'sqlite3' 
if defined? JRUBY_VERSION 
    gem 'jdbc-sqlite3' 
    gem 'activerecord-jdbcsqlite3-adapter' 
end 

は、我々はまた、コアJavaサービスをモック

は、例えば、私たちは、データベース構成を調整します私たちのためには、私は好奇心がある場合は、一般的なパターン(またはプラグイン、宝石、図書館など) RailsアプリケーションはRubyとJRubyの両方に対応していますか?

+0

あなたはjavaとMRIの宝石を作ることができるので、宝石のレベルで処理する必要があります。 – Reactormonk

+0

ええと...私はどのように宝石レベルでデータベースアダプターを変更することができますか分かりません。しかし、ええ、すべてのMRI/JRubyスイッチングロジックをgemに委譲することは、洗練されたソリューションになります。私はこのアプローチについていくつかの研究をします。提案ありがとう。 –

答えて

0

ここに答えるために3つの事があります:

  1. はしばらくdatabase.ymlをアダプタの設定を変更する必要がなかったです。 adapter: sqlite3またはmysqlなどのままにしておき、最新のアクティブレコード - jdbc-アダプタなどを使用してください。 のActiveRecord-jdbcsqlite3アダプタ

  2. 確かにあなたのGemfileでJRubyの特定の依存関係を処理するための正しい方法ではありません。 :platform指定子を使用してGemfile.lockが一貫し、ルビースイッチ間で再生成する必要がないようにすると、はるかに優れています。 :

    gem 'activerecord-jdbcsqlite3-adapter' :platform -> :jruby

  3. サービスは、おそらくそこに、「より良い」の方法ではありませんが、あなたはすべてのあなたのrubyist利用JRubyのない言及以来、私はサービス層などをさらす検討するモックのためにあなたが理解していないJavaの問題に直面していない(春の部分では動作しないため)rubyistはjrubyを実行していても、導入されたすべてのサービスを模倣する必要はありません。それ以外の

が、私はMRI上/テストの開発と生産にはJRubyを使ってとはかなり満足している、あなたのルビーの人々のための唯一の本当のハッスルは、彼らが「本当に」threadsafe!コード(JRubyのスタイルを書く理解することです私は宝石とMRIでうまく動作していないが、JRuby(おそらく3つは覚えているかもしれない)に問題があることはほとんどありませんでした。 JRubyでテストを実行しているCI(例:Jenkins)は、できる限り早い段階でそれらをキャッチすることをお勧めします。

関連する問題