Apache용으로 실행 가능한 mod_ruby가 아직 없는 이유는 무엇입니까?
-
09-06-2019 - |
문제
Ruby와 Rails의 인기만큼 이 문제는 이미 해결된 것 같습니다.JRuby와 mod_rails는 모두 훌륭하고 멋지지만, 그냥 Ruby용 Apache 모드는 왜 없는 걸까요?
해결책
기본적인 문제는 이렇습니다.오랫동안 MRI는 실행 가능한 유일한 Ruby 구현이었습니다.MRI에는 다른 응용 프로그램에 내장하기 어렵게 만드는 여러 가지 문제가 있습니다(기본적으로 mod_ruby 하다:이는 Apache에 MRI를 내장합니다), 특히 다중 스레드(Apache는)에 내장되어 있습니다.특히 스레드로부터 안전하지 않으며 상당한 전역 상태를 갖습니다.
이 전역 상태는 예를 들어 하나의 Rails 애플리케이션이 일부 클래스를 수정하면 다음을 의미합니다. 그 외 모든 것들 동일한 Apache 서버에서 실행되는 Rails 애플리케이션은 또한 이 수정된 클래스를 참조하세요.
또 다른 문제는 MRI 소스코드가 쉽게 해킹되지 않는다는 점이다.MRI는 이제 15년이 넘었고 그 모습이 보이기 시작했습니다.
이러한 문제로 인해 mod_ruby는 결코 정말 제대로 작동했고 어느 시점에서 관리자는 단순히 포기했습니다.
반면 C 기반 PHP 인터프리터는 처음부터 Apache 내부에서 mod_php로 실행되도록 설계되었습니다.실제로 처음 두 버전의 경우 인터프리터의 명령줄 버전조차 없었고 mod_php가 오직 PHP를 실행하는 방법.
Phusion Passenger(mod_rack, mod_rails라고도 함) 기본적으로 문제를 포기하고 회피하여 이 문제를 해결합니다.그들은 단순히 모든 애플리케이션에 대해 별도의 프로세스로 별도의 MRI 사본을 실행합니다.이는 Ruby에서만 훌륭하게 작동하는 것이 아닙니다.지원합니다 WSGI (Python 웹 프레임워크용 표준 인터페이스), 고문 (Ruby 웹 프레임워크의 표준 인터페이스) 및 Ruby on Rails를 직접 지원합니다.
내 희망은 켜져 있어요 mod_rubinius, 불행히도 아직 존재하지 않습니다. 루비니우스 처음부터 스레드로부터 안전하고, 내장 가능하며, 전역 상태가 없고, C 스택 등을 사용하지 않도록 설계되었습니다.하나의 Rubinius 프로세스 내에서 여러 Rubinius VM을 실행할 수 있도록 설계되었습니다.이로 인해 mod_rubinius는 mod_ruby보다 구현 및 유지 관리가 훨씬 더 쉬워졌습니다.불행하게도, 물론 Rubinius는 아직 출시되지 않았으며, mod_rubinius에 대한 실제 작업은 Rubinius가 출시될 때까지 시작조차 할 수 없습니다.좋은 소식은 mod_rubinius가 이미 mod_ruby보다 더 많은 인력을 보유하고 있다는 것입니다. 왜냐하면 Mod_rubinius는 Rails 호스팅 회사에서 작업하는 개발자에게 비용을 지불했기 때문입니다. 필사적으로 스스로 사용하고 싶어합니다.
다른 팁
mod_rails가 실제로 Rails 코드에만 국한되지 않는다는 misslav의 요점을 두 번 분명히 하는 것이 가치가 있을 것입니다.새로운 이름인 mod_rack이 훨씬 더 좋습니다.아주 작은 앱도 랙에 설치할 수 있습니다. 그 예는 다음과 같습니다.
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
하나가 있습니다: mod_ruby, 그러나 약 2년 동안 유지되지 않았습니다.