JRuby on Rails와 Ruby on Rails의 차이점은 무엇입니까?


135

JRuby와 JRuby on Rails를 사용 해보고 싶습니다. JRuby on Rails와 Ruby on Rails의 차이점에 대한 정보를 찾는 데 문제가 있습니다.

내가 찾아야 할 차이점은 무엇입니까?

답변:


160

JRuby는 JVM에서 실행되는 Ruby 구현이고 Matz의 Ruby는 C 구현입니다.

주목해야 할 주요 기능은 다음과 같습니다.

  1. JRuby는 Java VM에서 실행되며 Java 바이트 코드로 컴파일되거나 해석됩니다.
  2. JRuby는 Java 코드와 통합 할 수 있습니다. Java 클래스 라이브러리 (.jar)가있는 경우 JRuby를 사용하여 Ruby 코드에서이를 참조하고 사용할 수 있습니다. 다른 방향으로는 Java 내에서 JRuby 코드를 호출 할 수도 있습니다. JRuby는 JVM 및 애플리케이션 서버 기능을 사용할 수도 있습니다.
  3. JRuby는 일반적으로 Sun GlassFish 또는 Tomcat 웹 서버와 같은 Java 응용 프로그램 서버 내에서 호스팅됩니다.
  4. JRuby와 함께 원시 Ruby gem을 사용할 수는 없지만 대부분의 인기있는 Ruby 라이브러리에 대해 JRuby 구현이 있습니다.

JRuby 위키에 나열된 다른 차이점이 있습니다.


고마워요. 내가 찾던 모든 것에 대해 대답합니다. :)
epochwolf

4
아, 그리고 그것은 1.9보다 약간 느리게 실행됩니다
rogerdpack

1
JRuby on Rails의 성능 차이를 보려면 충분한 자원이있는 멀티 코어 시스템을 사용하는 것이 좋습니다. 느린 데이터베이스 쿼리는 JRuby에 병목 현상이 발생하여 MRI on Rails와 비슷하거나 느리게 수행 될 수 있습니다. JRuby는 또한 MRI보다 훨씬 많은 선행 메모리를 사용합니다.
Joseph Ravenwolfe

우리는 VPN을 통해 Oracle을 통해 jruby를 사용하여 엄청난 성능을 보였으며 (테스트는 매우 느리게 실행 됨) 로컬에서 (VPN없이) 루비, 레일 콘솔 등을 시작하는 데 3 초가 아닌 30 초 이상 걸립니다.
Michael Durrant

57

나는 GIL 과 관련 하여이 질문에 대한 모든 답변에서 중요한 것이 빠져 있다는 사실에 놀랐습니다 .

esp에 관심을 가져야 할 주요 차이점입니다. Rails로 구축 된 것과 같은 웹 애플리케이션에서는 진정한 동시성 ( "글로벌 통역사 잠금"무료)이 있습니다. JRuby로 두 개의 스레드가 실행 중이면 (예 : 사용자 요청 2 개 제공) 단일 프로세스 내에서 동시에 실행될 수 있지만 MRI에는 Ruby 코드를 병렬로 실행하지 않는 GIL (1.9의 기본 스레드 포함)이 있습니다.

응용 프로그램 개발자에게는 JRuby를 고려할 때 가장 먼저 염두에 두어야 할 것이 있습니다. JRuby는 config.threadsafe!코드와 보석 코드가 "정확하게"스레드로부터 안전해야합니다.


7

틀릴 수도 있지만 일반적인 RoR로는 할 수없는 방식으로 JRuby on Rails 앱을 패키징 할 수 있다고 생각합니다 .Mingle 또는 이와 유사한 것을보십시오. 바지를 떨어 뜨리거나 코 모노를 열지 않고도 판매 할 수 있습니다.

즉, 나는 RoR 패키징에 익숙하지 않으므로 나를 붙잡아 두지 마십시오. :)


1
Rawr 또는 Roir gem과 같은 것이 필요하지만 완전히 그렇습니다 (마지막으로 Mingle을 사용했을 때, 난독 화되지 않은 Ruby 파일이있었습니다 ...).
Marnen Laibow-Koser

3

대부분 동일하게 작동합니다. jRoR에서는 RoR에없는 것들에 액세스 할 수 있습니다. 일반적으로 주로 배포 문제입니다.

그러나 RoR 앱이 JVM에서 실행되는 동등한 라이브러리가없는 기본 라이브러리를 사용하는 경우 어려움이 될 수 있습니다. 그러나 대부분의 라이브러리에는 기본 버전이 아닌 버전이 있습니다 (적어도 인기있는 버전).


0

여기에 이미 훌륭한 답변이 있습니다.

eebbesen은 이미 기본 사항을 다루었 고 kares (자신!)는 JRuby에 GIL이 없다고 말했습니다.

좀 더 실용적인 관점에서 추가하고 Ruby on Rails에서 앱을 시작한 다음 성능상의 이유로 JRuby로 마이그레이션했습니다.

두 가지 주요 성능 이점이있었습니다. JRuby는 일부 상황에서 Ruby보다 단순히 더 빠르거나 빠릅니다. 그리고 두 번째, 글로벌 통역사 잠금 장치가 없기 때문에 멀티 스레딩을 수행 할 수있었습니다. .

매우 큰 Ruby on Rails 앱은 한 시간, 보석 등으로 ​​포팅되어 실행되었습니다. 유일한 실제 결함은 Java의 정규 표현식이 Ruby의 정규 표현식과 약간 다르다는 것입니다. 그것은 JRuby 측의 놀라운 업적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.