web-dev-qa-db-fra.com

JRuby sur Rails vs Ruby sur Rails, quelle différence?)

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

Quelles sont les différences que je dois rechercher?

131
epochwolf

JRuby est l'implémentation Ruby qui s'exécute sur une machine virtuelle Java tandis que Ruby est une implémentation C de Matz).

Les principales caractéristiques à noter sont les suivantes:

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

Il existe d'autres différences qui sont répertoriées sur le wiki JRuby:

156
user23117

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

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

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

54
kares

Je peux me tromper, mais je pense que vous pouvez empaqueter un JRuby sur Rails application d'une manière que vous ne pouvez pas faire avec un RoR normal - regardez Mingle ou similaire. Permet de vendre sans perdre) votre pantalon/ouverture du komono.

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

7
Nic Wise

il devrait surtout fonctionner de la même manière. dans jRoR, vous pouvez accéder à des choses que vous n'auriez pas dans RoR. Il s'agit généralement d'un problème de déploiement.

Cependant, 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 bibliothèques ont une version non native disponible (au moins les plus populaires que j'ai rencontrées).

3
Michael Neale