Phusion passager (pour les Nuls!)

Je suis un développeur de lampes expérimenté qui se déplace dans Rails. J'ai une question très stupide à poser: Que diable fait Phusion Passenger?

J'ai lu beaucoup de documentation, j'ai Googlé, j'ai lu Wikipédia, j'ai lu un Débordement de Pile. Je l'ai même installé et l'ai fait fonctionner sur une machine de développement (avec Apache). Je ne sais toujours pas ce qu'il fait en fait cependant.

Voici une supposition: je pense que c'est bizarre que la racine du document Apache pointe vers /mywebapp/public/ à la place de /mywebapp/, donc je suppose qu'il a à faire tout à l'intérieur de /mywebapp/ accessibles. (C'est une supposition sauvage cependant, basée sur le fait que je ne sais pas comment autrement ce genre de choses est accessible.)

J'ai compris que Passenger est révolutionnaire, révolutionnaire, etc, etc, Mais Que fait-il !?

Désolé pour la question n00b, tout le monde. Merci!

37
demandé sur Luke Girvin 2011-05-27 20:53:06

2 réponses

Passenger est un système de préparation et de lancement d'instances de Ruby pour une utilisation avec des applications basées sur Rack telles que Ruby on Rails. Apache et nginx, les deux plates-formes de serveur web prises en charge, ne peuvent pas exécuter Ruby comme PHP, Perl ou Python, car il n'y a pas de module Ruby intégré qui fonctionne aussi bien que ceux-ci. Cela signifie que Ruby a tendance à s'exécuter en tant que groupe indépendant de processus que le serveur web devra diriger le trafic.

Rails a tendance à fonctionner comme un processus persistant parce que le temps de démarrage pour l'ensemble de la pile est important. Passager lance de nouvelles instances comme ils sont nécessaires, et tuera ceux qui ne sont plus nécessaires. Vous pouvez le voir dans la liste des processus car ils sont clairement identifiés avec les préfixes" passager "et" Rails".

Une caractéristique de Passenger est qu'il réutilisera une partie de la pile Rails afin de créer des processus supplémentaires plus rapidement, clonant une instance au lieu d'en créer une nouvelle à partir de zéro. Le chargeur est écrit en C++ et gère correctement la configuration et le lancement de chaque processus Ruby aussi efficacement que possible et aide également à économiser de la mémoire en le partageant entre différents processus.

La raison pour laquelle vous hébergez des choses hors du répertoire public/ est d'éviter d'exposer votre application code-base. PHP doit être configuré correctement pour empêcher les gens de simplement parcourir les répertoires et de télécharger la source car il n'y a pas de distinction spécifique entre le contenu statique et les scripts exécutables. Un serveur mal configuré sera heureux de servir raw .les fichiers php au lieu de les exécuter, par exemple.

Passenger N'est pas vraiment révolutionnaire, mais il intègre un certain nombre de fonctionnalités essentielles dans un package très pratique. Ce qui en fait une si grande chose est que cela fonctionne très bien et ne demande pas beaucoup d'attention. Hors de la boîte, il est à peu près prêt à aller.

45
répondu tadman 2011-05-27 17:03:04

Il sert des applications ruby on rails (en fait n'importe quelle application rack). J'ai été utilisé avec la version 2.X de passenger pour l'intégrer directement dans apache, mais avec la nouvelle version, qui supporte l'exécution autonome, je préfère l'exécuter en mode autonome (en conjonction avec rvm)

Il peut être très utile à la fois en mode développement et en mode production et il accélère l'exécution de l'application RoR.

Afin de déployer une application RoR, Je l'installe avec son propre gemset, puis J'installe passenger dans ce gemset avec gem install passenger (vous pouvez également ignorer les gemsets en toute sécurité, mais ils isoleront l'environnement de l'application, donc c'est agréable de les avoir). Après cela, vous pouvez démarrer l'application avec passenger start -a 127.0.0.1 -p 3081 -e production dans la racine du projet.

Ensuite, je configure un serveur virtuel apache pour fonctionner en mode proxy inverse avec un fichier comme celui-ci

<VirtualHost *:80>
        ServerName your.server.org

        ProxyPass /  http://localhost:3081/
        ProxyPassReverse  /  http://localhost:3081/
        ProxyRequests     Off

        # Local reverse proxy authorization override
        # Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)
        <Proxy http://localhost:3081/*>
                Order deny,allow
                Allow from all
        </Proxy>
</VirtualHost>

Et vous allez bien, vous avez déployé votre application avec sa configuration locale, elle n'a même pas besoin de privilèges root (pour la partie passager).

6
répondu Fabio 2011-05-27 17:04:01