JRuby on RailsとRuby on Railsの違いは何ですか?


135

JRubyとJRuby on Railsを試してみたいと思っています。JRuby on RailsとRuby on Railsの違いに関する情報を見つけられません。

私が注意する必要がある違いは何ですか?

回答:


160

JRubyはJVMで実行されるRuby実装であり、MatzのRubyはC実装です。

注意すべき主な機能は次のとおりです。

  1. JRubyはJava VM上で実行され、Javaバイトコードにコンパイルまたは解釈されます。
  2. JRubyはJavaコードと統合できます。Javaクラスライブラリ(.jar)がある場合、JRubyを使用してRubyコード内からそれらを参照および使用できます。別の方向では、Java内からJRubyコードを呼び出すこともできます。JRubyは、JVMおよびアプリケーションサーバー機能も使用できます。
  3. JRubyは通常、SunのGlassFishまたはTomcat WebサーバーなどのJavaアプリケーションサーバー内でホストされます。
  4. JRubyでネイティブRuby gemを使用することはできませんが、人気のあるRubyライブラリのほとんどにはJRuby実装があります。

JRuby wikiにリストされている他の違いがあります:


ありがとう、それは私が探していたすべてのものについて答えます。:)
エポックウルフ'09 / 09/30

4
ああ、それは1.9よりも少し遅い
rogerdpack

1
JRuby on Railsのパフォーマンスの違いを確認するには、十分なリソースを備えたマルチコアマシンを用意することをお勧めします。データベースクエリが遅いと、JRubyのボトルネックになり、MRI on Railsと同等またはそれよりも低速で実行される可能性があります。また、JRubyはMRIよりもかなり多くの先行メモリを使用します。
Joseph Ravenwolfe

VPNを介したOracleでjrubyを使用した場合の大規模なパフォーマンス(テストの実行が非常に遅い)と、ローカル(VPNなし)の場合、3ではなく30秒以上かかる(Ruby、Railsコンソールなど)
Michael Durrant

57

GILに関連して、この質問に対するすべての回答に欠けている重要なことがあることに驚いています。

あなたが特に気にする必要がある主な違い。Railsで構築されたアプリケーションなどのWebアプリケーションでは、真の同時実行性(「グローバルインタープリターロック」は無料)です。JRubyで2つのスレッドが実行されているとき(たとえば、2つのユーザーリクエストを処理しているとき)は、単一のプロセス内で同時に実行できます。一方、MRIでは、Rubyコードの並列実行を回避するGIL(1.9のネイティブスレッドを使用している場合でも)があります。

アプリケーション開発者にとって、これはJRubyを検討する際に最初に心に留めておくべきことです。JRubyは本当に優れてconfig.threadsafe!いますが、コード(およびgemsコード)が「真に」スレッドセーフであることを確認する必要があります。


7

私は間違っているかもしれませんが、JRuby on Railsアプリを通常のRoRではできない方法でパッケージ化できると思います。Mingleなどを見てください。ズボンを落とさず、着物を開けずに販売が可能です。

とは言っても、私はRoRのパッケージ化については十分に詳しくないので、私をそれに拘束しないでください:)


1
これは完全に正しいですが、これを完全に行うにはRawrまたはRoir gemのようなものが必要になります(前回Mingleを使用したときは、難読化されていないRubyファイルがありました...)。
Marnen Laibow-Koser

3

ほとんど同じように動作するはずです。jRoRでは、RoRにはないものにアクセスできます。通常は主に展開の問題です。

ただし、RoRアプリが、JVMで実行される同等のライブラリを持たないネイティブライブラリを使用している場合は、面倒な場合があります。ただし、ほとんどのライブラリには非ネイティブバージョンがあります(少なくとも、私が遭遇した人気のバージョン)。


0

ここにはすでにいくつかの素晴らしい答えがあります。

eebbesenはすでに基本をカバーしており、kares(彼自身)はJRubyにはGILがないと私たちに言っています。

さらに実用的な観点から、Ruby on Railsでアプリを起動し、パフォーマンス上の理由からJRubyに移行しました。

2つの主要なパフォーマンス上の利点がありました。JRubyは、状況によってはRubyよりも速い(またはあった)こと、および2つは、グローバルインタープリターロックkaresの言及がないことで、マルチスレッドを実行できるようになりました。 。

非常に大きなRuby on Railsアプリが移植され、1時間で実行されました。実際のグリッチは、Javaの正規表現がRubyの正規表現とわずかに異なることでした。これは、JRubyにとって記念すべき成果です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.