JRuby on Rails vs. Ruby on Rails, fark nedir?


135

JRuby ve JRuby on Rails'i denemek istiyorum. JRuby on Rails ve Ruby on Rails arasındaki fark hakkında bilgi bulmakta sorun yaşıyorum.

Dikkat etmem gereken farklar nelerdir?

Yanıtlar:


160

JRuby bir JVM üzerinde çalışan Ruby uygulaması, Matz'ın Ruby bir C uygulamasıdır.

Dikkat edilmesi gereken temel özellikler:

  1. JRuby Java VM'lerinde çalışır ve Java bayt koduna derlenir veya yorumlanır.
  2. JRuby Java koduyla entegre olabilir. Java sınıfı kitaplıklarınız (.jar) varsa, bunlara JRuby ile Ruby kodu içinden başvurabilir ve kullanabilirsiniz. Diğer yönde de Java içinden JRuby kodunu çağırabilirsiniz. JRuby ayrıca JVM ve uygulama sunucusu özelliklerini de kullanabilir.
  3. JRuby genellikle Sun's GlassFish veya Tomcat web sunucusu gibi Java uygulama sunucularında barındırılır.
  4. JRuby ile yerli Ruby taşlarını kullanamasanız da, popüler Ruby kütüphanelerinin çoğu için JRuby uygulamaları vardır.

JRuby wiki'de listelenen başka farklılıklar da vardır:


Aradığım her şeye cevap veren teşekkür ederim. :)
epochwolf

4
oh, ve 1.9'dan biraz daha yavaş çalışıyor
rogerdpack

1
JRuby on Rails'daki performans farklılıklarını görmek için, yeterli kaynaklara sahip çok çekirdekli bir makineye sahip olmanız önerilir. Yavaş veritabanı sorguları da JRuby'yi tıkayabilir ve Rails on MRI ile benzer veya daha yavaş çalışmasına neden olabilir. JRuby ayrıca MRI'dan çok daha açık bir bellek kullanır.
Joseph Ravenwolfe

Hem VPN üzerinden Oracle ile jruby kullanarak (testler inanılmaz derecede yavaş çalışıyor) hem de yerel olarak (VPN yok) sadece yakut, ray konsolu vb.'yi başlatırken 3 yerine 30 saniye + sürüyor.
Michael Durrant

57

Bu soruya verilen, GIL ile ilgili tüm cevaplarda önemli bir şeyin eksik olduğuna şaşırdım .

Esp. Rails ile oluşturulanlar gibi web uygulamalarında gerçek bir eşzamanlılık vardır ("Global Tercüman Kilidi" ücretsiz). JRuby ile iki iş parçacığı çalışırken (örn. 2 kullanıcı isteğine hizmet ederken), tek bir işlemde eşzamanlı olarak çalışabilirler, MRI'da Ruby kodunu paralel olarak yürütmekten kaçınan GIL (1.9'ın yerel iş parçacıklarıyla bile) vardır.

Bir uygulama geliştiricisi için bu, JRuby'yi düşünürken akılda tutulması gereken ilk şeydir, çünkü gerçekten parlar, config.threadsafe!ancak kodunuzun (ve değerli taş kodunuzun) "gerçekten" iş parçacığı açısından güvenli olduğundan emin olmanızı gerektirir.


7

Yanılıyor olabilirim, ancak normal bir RoR ile yapamayacağınız bir şekilde bir JRuby on Rails uygulamasını paketleyebileceğinizi düşünüyorum - Mingle veya benzerine bakın. Pantolonunu düşürmeden / komonoyu açmadan satmayı mümkün kılar.

Bununla birlikte, RoR ambalajına yeterince aşina olmadığımı söyledi, bu yüzden beni tutmayın :)


1
Bu konuda kesinlikle haklısınız, ancak bunu yapmak için Rawr veya Roir gem gibi bir şeye ihtiyacınız olacak (Mingle'yi en son kullandığımda, şaşırtılmamış Ruby dosyaları vardı ...).
Marnen Laibow-Koser

3

çoğunlukla aynı şekilde çalışmalıdır. jRoR'da RoR'da sahip olmayacağınız şeylere erişebilirsiniz. Genellikle bu bir dağıtım endişesidir.

Ancak, RoR uygulamanız JVM'de çalışan eşdeğeri olmayan yerel kütüphaneler kullanıyorsa, bu bir acı olabilir. Ancak çoğu kütüphanede yerel olmayan bir sürüm vardır (en azından karşılaştığım popüler olanlar).


0

Burada zaten bazı harika cevaplar var.

eebbesen zaten temelleri kapsıyordu ve kares (kendisi!) JRuby'nin GIL olmadığını söyledi.

Daha pratik bir bakış açısıyla ekleyeceğim, Ruby on Rails'te uygulamalar başlattım ve performans nedenleriyle JRuby'ye geçtim.

İki ana performans avantajı vardı: JRuby, bazı durumlarda Ruby'den sadece daha hızlı (veya öyleydi) ve ikincisi, Global Tercüman Kilidi karelerinin eksikliği, zor olsa da, büyüklük performans avantajları emirlerinin kilidini açarak çoklu okuma yapmamı sağladı. .

Çok büyük bir Ruby on Rails uygulaması taşınmış ve bir saat, taşlar ve hepsi koştu. Tek gerçek hata, Java'nın normal ifadelerinin Ruby'ninkinden biraz farklı olmasıydı. Bu JRuby'nin anıtsal bir başarısı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.