JRuby on Rails vs. Ruby on Rails, qual a diferença?

135

Estou tentando experimentar o JRuby e o JRuby on Rails. Estou tendo problemas para encontrar informações sobre a diferença entre o JRuby on Rails e o Ruby on Rails.

Quais são as diferenças que eu preciso observar?

epochwolf
fonte

Respostas:

160

JRuby é a implementação do Ruby executada em uma JVM, enquanto o Ruby do Matz é uma implementação em C.

Os principais recursos a serem observados são:

  1. O JRuby é executado nas Java VMs e é compilado ou interpretado no código de bytes Java.
  2. O JRuby pode se integrar ao código Java. Se você possui bibliotecas de classes Java (.jar), é possível fazer referência e usá-las no código Ruby com o JRuby. Na outra direção, você também pode chamar o código JRuby de dentro do Java. O JRuby também pode usar os recursos da JVM e do servidor de aplicativos.
  3. O JRuby geralmente é hospedado em servidores de aplicativos Java, como o GlassFish da Sun ou mesmo no servidor da Web Tomcat.
  4. Embora você não possa usar gemas Ruby nativas com o JRuby, existem implementações do JRuby para a maioria das bibliotecas populares do Ruby.

Existem outras diferenças listadas no wiki do JRuby:

user23117
fonte
Obrigado, isso responde a quase tudo o que eu estava procurando. :)
epochwolf 30/09/08
4
Ah, e ele corre um pouco mais lento do que 1,9
rogerdpack
1
Para ver as diferenças de desempenho no JRuby on Rails, é recomendável ter uma máquina multicore com recursos suficientes. As consultas lentas do banco de dados também podem afunilar o JRuby e fazer com que ele execute uma execução semelhante ou mais lenta que a MRI no Rails. O JRuby também usa significativamente mais memória inicial do que a ressonância magnética.
Joseph Ravenwolfe
Temos tanto o desempenho maciça com o uso de JRuby com a Oracle sobre VPN (testes executados incrivelmente devagar) e também localmente (sem VPN) apenas começando rubi, trilhos console, etc leva 30 segundos + em vez de 3.
Michael Durrant
57

Estou surpreso que algo crucial esteja faltando em todas as respostas a essa pergunta, relacionadas ao GIL .

A principal diferença que você deve se preocupar com esp. em aplicativos da web, como os criados com o Rails, é simultânea a verdade (livre de "Global Interpreter Lock"). Quando dois threads estão em execução (por exemplo, atendendo a 2 solicitações de usuário) com o JRuby, eles são capazes de executar simultaneamente em um único processo, enquanto na MRI há o GIL (mesmo com os threads nativos do 1.9) que evita a execução do código Ruby em paralelo.

Para um desenvolvedor de aplicativos, essa é a primeira coisa a ter em mente ao considerar o JRuby, pois ele realmente brilha, config.threadsafe!mas exige que você garanta que seu código (e seu código de gemas) seja "verdadeiramente" seguro para threads.

kares
fonte
7

Posso estar errado, mas acho que você pode empacotar um aplicativo JRuby on Rails de uma maneira que você não pode fazer com o RoR normal - veja Mingle ou similar. Torna possível vender sem deixar cair a calça / abrir o komono.

Dito isto, eu não estou familiarizado o suficiente com as embalagens RoR, então não me segure: :)

Nic Wise
fonte
1
Você está absolutamente correto nisso, apesar de precisar de algo como a gema Rawr ou Roir para fazer isso completamente (da última vez que usei o Mingle, ele tinha arquivos Ruby não ofuscados ...).
Marnen Laibow-Koser
3

principalmente deve funcionar da mesma maneira. no jRoR, você pode acessar coisas que você não teria no RoR. Geralmente é principalmente uma preocupação de implantação.

No entanto, se o seu aplicativo RoR usar bibliotecas nativas que não têm um equivalente que é executado na JVM, isso pode ser um problema. No entanto, a maioria das bibliotecas tem uma versão não nativa disponível (pelo menos as mais populares que já encontrei).

Michael Neale
fonte
0

Já existem ótimas respostas aqui.

O eebbesen já cobriu o básico e o kares (ele mesmo!) nos disse que o JRuby não tem GIL.

Vou acrescentar de uma perspectiva mais prática, lancei aplicativos no Ruby on Rails e migrei para o JRuby por motivos de desempenho.

Havia dois principais benefícios de desempenho: o JRuby é (ou era) simplesmente mais rápido que Ruby em algumas circunstâncias e dois, a falta das menções do Global Interpreter Lock kares me permitiu fazer multithreading, que, embora complicado, desbloqueou ordens de magnitude de benefícios de desempenho .

Um aplicativo Ruby on Rails muito grande foi portado e executado em uma hora, com gemas e tudo. A única falha real foi que as expressões regulares do Java são ligeiramente diferentes das do Ruby. Essa é uma conquista monumental da parte de JRuby.

user2057354
fonte