web-dev-qa-db-ja.com

JRuby on Rails vs. Ruby on Rails、違いは何ですか?

JRubyとJRuby on Railsを試してみたいと思っています。 RailsとRails上のRubyのJRubyの違いに関する情報を見つけるのに問題があります。

注目すべき違いは何ですか?

131
epochwolf

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

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

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

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

156
user23117

[〜#〜] gil [〜#〜]に関連して、この質問に対するすべての回答に重要なものが欠けていることに驚いています。

あなたがespを気にする必要がある主な違い。 Rails is true concurrency( "Global Interpreter Lock" free)。2つのスレッドが実行されている場合(たとえば、2つのユーザーリクエストを処理する場合) JRubyでは、単一プロセス内で同時に実行できますが、MRIでは、Rubyコードの並列実行を回避するGIL(1.9のネイティブスレッドでも)があります。

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

54
kares

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

とは言うものの、RoRパッケージについては十分に詳しくないので、それに固執しないでください:)

7
Nic Wise

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

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

3
Michael Neale