1

私はRubyonRailsを使用していくつかのプロジェクトを実行しました。JRuby on Railsを使用して、GAEでホスティングします。その場合、JRubyアプリを開発する際に知っておくべきことは何ですか。私はそれを読んだ

  • JRubyの構文は同じです
  • Javaライブラリにアクセスできます
  • JRubyは一部のgem/プラグインにアクセスできません
  • JRubyアプリは初めてロードするのに時間がかかるので、5分程度ごとにリクエストを送信して存続させる必要があります
  • ActiveRecordを使用できず、代わりにDataMapperを使用する必要があります

私が行った発言のいずれかについて間違っている場合は訂正してください。他に知っておくべきことはありますか。JRubyについて最初から読み始める必要がありますか、それとも通常どおりRubyアプリの開発に取り掛かることができますか?

4

3 に答える 3

3

私は毎日JRubyを使っています。

正しい:

  • JRubyの構文は同じです
  • JRubyは一部のgem/プラグインにアクセスできません
  • Javaライブラリにアクセスできます

一部のgem/プラグインにはjruby固有のバージョンがあり、一部はまったく機能しません。一般的に、私はほとんど問題を発見しませんでした、そして、ライブラリとプラットフォームが成熟するにつれて、多くの問題はなくなりました(JRubyはずっと良くなりました)。

Javaにアクセスできますが、一般的に、なぜアクセスしたいのですか?

誤り:

  • JRubyアプリは初めてロードするのに時間がかかるので、5分程度ごとにリクエストを送信して存続させる必要があります
  • ActiveRecordを使用できず、代わりにDataMapperを使用する必要があります

JVMの初期起動/ウォームアップコストがサーバーにpingを実行する必要があることを意味するサーバー設定を想像することは可能だと思いますが、これを実現するJRubyに固有のものはありません。サーバーを存続させる必要がある場合は、デプロイメント環境を確認する必要があります。乗客との共有ホスティングでも同様のことが起こり、一定期間操作がないとアプリのメモリが不足する可能性があります。

また、ActiveRecordを問題なく使用しています。

于 2010-08-30T09:47:05.787 に答える
1

afaik、rails 3はjrubyと100%互換性があるため、そのパスで問題は発生しないはずです。

すべての新しいプラットフォームと同様に、jrubyで遊んで、快適に使用できるようにする必要があります。RVMを使用してそれを行うことをお勧めします。

あなたの質問が行く限り:

  • JRubyは、MRIやRubinusのような他のランタイムです。
  • JRubyはJavaを使用してJVM内にあるため、Javaを使用するのは非常に簡単ですが、MRIからRJBを使用することもできます。
  • 一部のgemは、JRubyで実行されないネイティブcライブラリを使用する場合、互換性がありません
  • JVMとアプリケーションコンテナには、起動時間とアプリをロードするための時間が必要ですが、それだけです。生き続ける必要はありません。それは間違っています。
  • あなたは好きなものを使うことができます、ほとんどの宝石はJRubyと互換性があるように更新されています
于 2010-08-30T10:03:48.320 に答える
0

@TobyHedeは、あなたが抱えていると思われる問題をほとんどカバーしていたので、そのままにしておきます。

心に留めておくべき他のことに関しては、それは単に異なる通訳者であり、いくつかの適応を必要とする面白い矛盾が発生します。

  1. sleep 10.seconds例外をスローするなど、一部のメソッドは異なる方法で実装されます(必要がありますsleep 10.seconds.to_i)。MRIからJRubyに切り替えるときにSymbolクラスでNoMethodErrorが発生したことを覚えています(実装されていないメソッドを覚えていません)。そこにいる
  2. 他の方法では機能していたgemでハングや例外が発生します(たとえば、複数のページをリストする場合はこじ開けてください)
  3. 一部の宝石は動作が異なる場合があります。たとえば、ctrl+を押すと、(再び)こじ開けが終了します。かなり迷惑です。c
  4. すべてのロード時間がわずかに遅くなり、zeusはありません
  5. 発生したルビーコードの行が示されていないJava例外スタックトレースがときどき表示されます
  6. Timeout.timeoutラップアラウンドされたネットコードとスターの整列が悪い場合、多くの場合、期待どおりに機能しません(これは、ほとんどjrubyコアで修正されていますが、純粋なJavaで独自のネットコードを実行するgemの問題のようです)
  7. サードパーティコードのスレッドセーフに関する隠れた問題高スループットのマルチスレッドRailsアプリのgemをどのように選択しますか?-たとえば、EventMachineに近づかないでください
  8. スレッドは素晴らしく(ネイティブでギルがないため)、ファイバーは吸い込まれます(JVMでコルーチンがサポートされていないため、通常のスレッドです)。これが、MRIと比較した場合にセルロイドでパフォーマンスが向上しないことが多い理由です。
  9. 以前はOSのプロセスとしてMRIRubyを使用してレールを実行していましたが、PIDの追跡、肥大化、実行時間、強制終了、監視などの方法を知っていました。JRubyに切り替えると、すべてが単一のプロセスでスレッド。Javaの世界には、これらの問題を処理するための非常に優れたツールがありますが、それはあなたが学ばなければならないことです。
  10. killall -9 rubyコンソールがハングしたときにjrubyでトリックを実行しません(以前よりも頻繁に実行されps -efます)。NetBeansなどを強制終了せずに適切なプロセスを追跡する必要があります(マイナーですが、煩わしい)
  11. 私の最後のポイントにより、JavaとJVMを知っていると、特定の状況でタイトな場所から抜け出すのに役立ちます(これを実行する目的によっては、実際に必要なものになる場合があります)。デプロイメントサーバーの選択により、この必要性が増減します。 (たとえば、torqueboxはこれで少し悪名高いですが、他のデプロイメントオプションの方が簡単な場合があります。http://thenerdings.blogspot.com/2012/09/pulling-plug-on-torquebox-and-jruby-for.htmlを参照してください
  12. ..。

また、jrubyチームが違いについて言っていることを確認してください。https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby

しかし、そうでなければ、「MRIRubyとまったく同じ」です:)

于 2014-01-04T09:47:22.337 に答える