JRuby와 JRuby on Rails를 사용 해보고 싶습니다. JRuby on Rails와 Ruby on Rails의 차이점에 대한 정보를 찾는 데 문제가 있습니다.
내가 찾아야 할 차이점은 무엇입니까?
답변
JRuby는 JVM에서 실행되는 Ruby 구현이고 Matz의 Ruby는 C 구현입니다.
주목해야 할 주요 기능은 다음과 같습니다.
- JRuby는 Java VM에서 실행되며 Java 바이트 코드로 컴파일되거나 해석됩니다.
- JRuby는 Java 코드와 통합 할 수 있습니다. Java 클래스 라이브러리 (.jar)가있는 경우 JRuby를 사용하여 Ruby 코드에서이를 참조하고 사용할 수 있습니다. 다른 방향으로는 Java 내에서 JRuby 코드를 호출 할 수도 있습니다. JRuby는 JVM 및 애플리케이션 서버 기능을 사용할 수도 있습니다.
- JRuby는 일반적으로 Sun GlassFish 또는 Tomcat 웹 서버와 같은 Java 응용 프로그램 서버 내에서 호스팅됩니다.
- JRuby와 함께 원시 Ruby gem을 사용할 수는 없지만 대부분의 인기있는 Ruby 라이브러리에 대해 JRuby 구현이 있습니다.
JRuby 위키에 나열된 다른 차이점이 있습니다.
답변
나는 GIL 과 관련 하여이 질문에 대한 모든 답변에서 중요한 것이 빠져 있다는 사실에 놀랐습니다 .
esp에 관심을 가져야 할 주요 차이점입니다. Rails로 구축 된 것과 같은 웹 애플리케이션에서는 진정한 동시성 ( “글로벌 통역사 잠금”무료)이 있습니다. JRuby로 두 개의 스레드가 실행 중이면 (예 : 사용자 요청 2 개 제공) 단일 프로세스 내에서 동시에 실행될 수 있지만 MRI에는 Ruby 코드를 병렬로 실행하지 않는 GIL (1.9의 기본 스레드 포함)이 있습니다.
응용 프로그램 개발자에게는 JRuby를 고려할 때 가장 먼저 염두에 두어야 할 것이 있습니다. JRuby는 config.threadsafe!
코드와 보석 코드가 “정확하게”스레드로부터 안전해야합니다.
답변
틀릴 수도 있지만 일반적인 RoR로는 할 수없는 방식으로 JRuby on Rails 앱을 패키징 할 수 있다고 생각합니다 .Mingle 또는 이와 유사한 것을보십시오. 바지를 떨어 뜨리거나 코 모노를 열지 않고도 판매 할 수 있습니다.
즉, 나는 RoR 패키징에 익숙하지 않으므로 나를 붙잡아 두지 마십시오. 🙂
답변
대부분 동일하게 작동합니다. jRoR에서는 RoR에없는 것들에 액세스 할 수 있습니다. 일반적으로 주로 배포 문제입니다.
그러나 RoR 앱이 JVM에서 실행되는 동등한 라이브러리가없는 기본 라이브러리를 사용하는 경우 어려움이 될 수 있습니다. 그러나 대부분의 라이브러리에는 기본 버전이 아닌 버전이 있습니다 (적어도 인기있는 버전).
답변
여기에 이미 훌륭한 답변이 있습니다.
eebbesen은 이미 기본 사항을 다루었 고 kares (자신!)는 JRuby에 GIL이 없다고 말했습니다.
좀 더 실용적인 관점에서 추가하고 Ruby on Rails에서 앱을 시작한 다음 성능상의 이유로 JRuby로 마이그레이션했습니다.
두 가지 주요 성능 이점이있었습니다. JRuby는 일부 상황에서 Ruby보다 단순히 더 빠르거나 빠릅니다. 그리고 두 번째, 글로벌 통역사 잠금 장치가 없기 때문에 멀티 스레딩을 수행 할 수있었습니다. .
매우 큰 Ruby on Rails 앱은 한 시간, 보석 등으로 포팅되어 실행되었습니다. 유일한 실제 결함은 Java의 정규 표현식이 Ruby의 정규 표현식과 약간 다르다는 것입니다. 그것은 JRuby 측의 놀라운 업적입니다.