Question

Je suis en train de configurer un serveur Web Apache2 exécutant plusieurs applications Web Ruby on Rails avec Phusion Passenger. Je sais que les passagers génèrent des processus Ruby pour le traitement des demandes. J'ai les questions suivantes:

  • Si plusieurs demandes doivent être traitées en même temps, Passenger créera-t-il plusieurs processus ou plusieurs threads (Ruby)? Comment puis-je le configurer pour qu'il génère toujours des processus mono-threadés?
  • Si j'ai deux applications Rails, imaginez qu'une demande pour l'application A passe au processus 1, puis qu'une demande ultérieure pour l'application B arrive. Est-il possible que le processus 1 traite également cette demande? Quand et comment est-ce possible? En d'autres termes, un processus est-il autorisé à gérer les requêtes de plusieurs applications Rails?
  • J'ai la même application Rails exportée dans plusieurs URL et plusieurs hôtes virtuels (tels que http: // et https: //). Le même processus pourra-t-il servir différents hôtes virtuels? (La réponse à cette question semble être oui, j'ai défini une variable globale pour répondre à une demande adressée à l'hôte virtuel A et j'ai pu extraire la valeur de l'hôte virtuel B.)
Était-ce utile?

La solution

De manière générale, les passagers génèrent de nouveaux processus en forçant un ApplicationSpawner, qui a le code d’application et le cadre pré-chargé en mémoire, ou un FrameworkSpawner, qui n’a que le code d’infrastructure.

Autant que je sache, le passager ne traite pas de fils. Au lieu de cela, à mesure que la charge augmente sur une application, elle divisera ApplicationSpawner de cette application et initialisera une autre instance. Lorsque la charge diminue, une ou plusieurs instances d'application sont supprimées.

Si Passenger est configuré d’une certaine manière (je crois en choisissant la méthode spawn "intelligente"), il créera un FrameworkSpawner, qui charge le code de rails, mais pas de code d’application, qui peut ensuite être chargé pour charger et application utilisant cette version de Rails.

Donc pour répondre à vos questions:

  • Il les servira de manière séquentielle, puis créera des processus supplémentaires s'il décide que la charge est suffisamment élevée.

  • Non. Un processus ne peut appartenir qu'à une seule application Rails.

  • Je suis un peu louche sur celui-ci, mais votre expérience est logique. Le passager devrait être assez intelligent pour comprendre que même s’il s’applique à différents endroits de la configuration du serveur, vous parlez de la même application. C'est probablement basé sur le chemin du système de fichiers de l'application.

EDIT: Je suis allé lire un peu à ce sujet. Il s'avère que j'avais surtout raison, mais les détails techniques étaient un peu décalés. Consultez la documentation à l'intention des passagers

.

Autres conseils

Oui, Burke a raison. Dans le cas de la troisième question, Phusion Passenger reconnaît les applications par leur chemin racine. Ainsi, même si vous avez deux hôtes virtuels, s'ils pointent tous deux vers le même DocumentRoot, Phusion Passenger pensera qu'ils sont la même application.

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