JRuby on Rails vs Ruby on Rails, Quelle est la différence?

Je cherche à essayer JRuby et JRuby sur Rails. J'ai du mal à trouver des informations sur la différence entre JRuby on Rails et Ruby on Rails.

Quelles sont les différences que je dois rechercher?

128
demandé sur James McMahon 2008-09-30 07:00:17

4 réponses

JRuby est l'implémentation ruby qui s'exécute sur une JVM alors que Ruby de Matz est une implémentation C.

Les principales caractéristiques à noter sont:

  1. Jruby fonctionne sur des machines virtuelles Java et il est compilé ou interprété en code octet Java.
  2. JRuby peut s'intégrer au code Java. Si vous avez des bibliothèques de classes java (.jar), vous pouvez les référencer et les utiliser à partir du code ruby avec JRuby. Dans l'autre sens, vous pouvez également appeler le code Jruby à partir de Java. JRuby peut également utiliser la JVM et l'application des capacités du serveur.
  3. JRuby est généralement hébergé dans des serveurs D'applications Java tels que sun's glassfish ou même le serveur Web Tomcat.
  4. Bien que vous ne puissiez pas utiliser de gemmes Ruby natives avec JRuby, il existe des implémentations jruby pour la plupart des bibliothèques Ruby populaires.

Il y a d'autres différences qui sont listées sur le wiki jruby:

152
répondu user23117 2013-03-05 17:58:35

Je suis surpris qu'il manque une chose cruciale dans toutes les réponses à cette question, liée à GIL .

La principale différence que vous devriez vous soucier de esp. dans les applications web telles que celles construites avec Rails, true concurrency ("Global Interpreter Lock" gratuit). Lorsque deux threads sont en cours d'exécution (par exemple, servir 2 requêtes utilisateur) avec JRuby, ils sont capables de s'exécuter simultanément dans un seul processus, alors qu'en IRM, il y a le GIL (même avec les threads natifs de 1.9) qui évite exécuter du code Ruby en parallèle.

Pour un développeur d'applications, c'est la première chose à garder à l'esprit tout en considérant JRuby, car il brille vraiment avec config.threadsafe! mais vous oblige à vous assurer que votre code (et votre code gems) soit "vraiment" thread-safe.

51
répondu kares 2012-06-29 07:52:35

Je peux me tromper, mais je pense que vous pouvez emballer une application JRuby on Rails d'une manière que vous ne pouvez pas faire avec ROR normal - regardez Mingle ou similaire. Permet de vendre sans laisser tomber votre pantalon / ouvrir le komono.

Cela dit, Je ne suis pas assez familier avec l'emballage RoR, alors ne m'y tenez pas:)

7
répondu Nic Wise 2008-10-07 14:42:13

La plupart du temps, cela devrait fonctionner de la même manière. dans jRoR, vous pouvez accéder à des choses que vous n'auriez pas dans RoR. Habituellement, c'est principalement une préoccupation de déploiement.

Toutefois, si votre application RoR utilise des bibliothèques natives qui n'ont pas d'équivalent qui s'exécute sur la JVM, cela peut être pénible. Cependant, la plupart des libs ont une version non native disponible (au moins les plus populaires que j'ai rencontrés).

3
répondu Michael Neale 2008-09-30 03:53:42