Question

Aussi populaire que soient Ruby et Rails, il semble que ce problème serait déjà résolu. JRuby et mod_rails vont bien, mais pourquoi n’existe-t-il pas de mod Apache pour Ruby?

Était-ce utile?

La solution

Le problème fondamental est le suivant: pendant longtemps, l’IRM était la seule implémentation Ruby réalisable. L’IRM présente un certain nombre de problèmes qui rendent difficile son intégration dans une autre application (ce que mod_ruby fait: il intègre IRM sous Apache), notamment multi-thread (Apache). Ce n'est pas particulièrement thread-safe et il a un peu d'état global.

Cet état global signifie par exemple que si une application Rails modifie une classe, puis toutes les autres applications Rails qui s'exécutent sur le même serveur Apache, ainsi le verra également modifié classe.

Un autre problème est que le code source de l'IRM n'est pas facilement piratable. L’IRM a maintenant plus de 15 ans et commence à se montrer.

En raison de ces problèmes, mod_ruby n'a jamais réellement correctement fonctionné et, à un moment donné, les responsables ont tout simplement abandonné.

L’interprète PHP basé sur C, en revanche, a été conçu dès le premier jour pour être exécuté en tant que mod_php dans Apache. En effet, pour les deux premières versions, il n'y avait même pas de version en ligne de commande de l'interpréteur, mod_php était la seule seule façon d'exécuter PHP.

Phusion Passenger (alias mod_rack ou mod_rails) résout ce problème en abandonnant et en contournant le problème: ils exécutent tout simplement une copie séparée de l'IRM dans un processus séparé pour chaque application. Cela fonctionne très bien, et pas seulement pour Ruby. Il prend en charge les WSGI (interface standard pour les cadres Web Python), Rack (interface standard pour Ruby Web Frameworks) et prise en charge directe de Ruby on Rails.

Mes espoirs reposent sur le mod_rubinius , qui n'existe malheureusement pas encore. Rubinius a été conçu dès le départ pour être thread-safe, intégrable, libre de tout état global, ne pas utiliser la pile C, etc. sur. Il a été conçu pour pouvoir exécuter plusieurs machines virtuelles Rubinius dans un processus Rubinius. Cela rend mod_rubinius infiniment plus facile à implémenter et à maintenir que mod_ruby. Malheureusement, bien entendu, Rubinius n’est pas encore publié et le véritable travail sur mod_rubinius ne peut même pas commencer avant que Rubinius ne soit publié. La bonne nouvelle est que mod_rubinius a déjà plus de main-d’œuvre que mod_ruby, car il a payé les développeurs qui travaillent dessus avec une société d’hébergement Rails qui souhaite désespérément l’utiliser eux-mêmes.

Autres conseils

Il existe Phusion Passenger , un module Apache robuste pouvant exécuter Rack avec une configuration minimale. Cela devient attrayant pour les hôtes partagés, et transformer tout programme en application Rack est ridiculement facile:

  

Une application Rack est un objet Ruby.   (pas une classe) qui répond à call .   Il faut exactement un argument , le   environnement et retourne un tableau de   exactement trois valeurs : le statut, le   les en-têtes et le corps.

Cela vaut peut-être la peine de clarifier deux fois le propos de mislav que mod_rails ne se limite pas du tout au code Rails. Le nouveau nom, mod_rack, est bien meilleur. Les petites applications peuvent être rackables - leur exemple étant:

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

Il en existe un: mod_ruby , mais il n'a pas été mis à jour depuis environ 2 ans.

Il existe mod_rails et il peut exécuter Rack , de quoi avez-vous besoin?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top