Frage

Wie populär wie Ruby und Rails sind, scheint es, wie dieses Problem bereits gelöst werden würde. JRuby und mod_rails ist alles schön und gut, aber warum nicht da ist eine Apache-Mod für nur gerade Rubin?

War es hilfreich?

Lösung

Das grundlegende Problem ist folgendes: für eine lange Zeit, MRT war die einzig gangbare Ruby-Implementierung. MRI hat eine Reihe von Problemen, die es schwer machen, sie in einer anderen Anwendung einbetten (was im Grunde ist das, was mod_ruby tut: es bettet MRI in Apache), insbesondere ein Multi-threaded-on (die Apache ist). Es ist nicht besonders Thread-sicher und es hat ziemlich viel globalen Zustand.

Diese globale Zustand bedeutet zum Beispiel, dass, wenn eine Rails-Anwendung modifiziert einige Klasse, dann alle anderen Rails-Anwendungen, die auf dem gleichen Apache-Server ausführen, wird auch sehen diese modifizierte Klasse.

Ein weiteres Problem ist, dass der MRI-Quellcode nicht leicht hackable ist. Die MRT ist jetzt mehr als 15 Jahre alt, und es fängt an zu zeigen.

Als Folge dieser Probleme mod_ruby hat nie wirklich richtig gearbeitet, und irgendwann die Maintainer einfach aufgeben.

Die C basierten PHP-Interpreter, auf der anderen Seite, vom ersten Tag wurden entwickelt man als mod_php innerhalb Apache ausgeführt werden sollte. Denn für die ersten paar Versionen war es nicht einmal eine Kommandozeilen-Version des Dolmetschers, Mod_php war der nur Weg, um PHP zu laufen.

Phusion Passagier (aka mod_rack aka mod_rails) dieses Problem, indem grundsätzlich die Aufgabe löst und ausweicht das Problem: sie einfach laufen eine separate Kopie der MRT in einem separaten Prozess für jede Anwendung. Es funktioniert großartig, und zwar nicht nur für Ruby. Es unterstützt WSGI (Standard-Schnittstelle für Python Web-Frameworks), Rack (Standard-Schnittstelle für Ruby Web Frameworks) und direkte Unterstützung für Ruby on Rails.

Meine Hoffnungen sind auf mod_rubinius , die leider noch nicht existiert. Rubinius von Anfang an konstruiert wurde threadsicher, bündig zu sein, frei von globalem Zustand, nicht den C-Stack verwenden und so auf. Es wurde entwickelt, um der Lage sein, mehrere Rubinius VMs innerhalb eines Rubinius Prozess ausgeführt. Dies macht mod_rubinius unendlich viel einfacher zu implementieren und warten als mod_ruby. Leider ist natürlich Rubinius noch nicht freigegeben, und die eigentliche Arbeit auf mod_rubinius kann nicht einmal beginnen, bis Rubinius freigegeben wird. Die gute Nachricht ist, dass mod_rubinius schon mehr Arbeitskräfte hinter sich hat als mod_ruby je hatte, weil es die Entwickler arbeiten daran durch eine Rails-Hosting-Unternehmen gezahlt hat, dass verzweifelt will es selbst nutzen.

Andere Tipps

Es gibt Phusion Passagier , ein robustes Apache-Modul, das Rack Anwendungen mit Minimalkonfiguration. Es ist immer zu gemeinsamen Rechnern ansprechend, und jedes Programm in einem Rack Anwendung Drehen ist lächerlich einfach:

  

Eine Rack-Anwendung ist ein Ruby- Objekt   (Keine Klasse), die auf call reagiert.   Es dauert genau ein Argument , die   Umwelt und gibt ein Array von   genau drei Werte : Der Status, der   Header und der Körper.

Es ist vielleicht wert doppelt klärende Punkt mislav ist, die tatsächlich mod_rails zu Rails-Code überhaupt nicht darauf beschränkt. Der neue Name, mod_rack, ist viel besser. Trivial kleine Anwendungen können Rackable sein - ihr Beispiel Wesen:

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
  end
end

Es gibt ein: mod_ruby , aber es wurde in etwa 2 Jahren nicht mehr gepflegt.

Es gibt mod_rails und es kann laufen Rack Anwendungen, was will man mehr brauchen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top