Toute la question de la mise en place d'un serveur de développement pour mon application Ruby on Rails m'embrouille. Il y a WEBrick, Mongrel, Passenger, Apache, Nginx et bien d'autres, je suis sûr, et je ne comprends pas vraiment les différents rôles qu'ils jouent.
J'ai commencé à utiliser WEBrick, et maintenant j'utilise Mongrel pour le développement. Ces serveurs sont-ils autonomes ou se trouvent-ils devant Apache?
J'ai lu sur Passenger et je ne comprends pas vraiment ce que c'est, le site dit "facilite le déploiement des applications Web Ruby", remplace-t-il Mongrel? Est-ce comme Capistrano, qui déploie également des applications Web?
En gardant à l'esprit que je voudrais tester SSL, et je crois que ce n'est pas pris en charge par mongrel, quelle est la meilleure configuration de serveur de développement?
Merci
Réponses:
Le mot «déploiement» peut avoir deux sens selon le contexte. Vous confondez également les rôles d'Apache / Nginx avec les rôles d'autres composants.
Remarque historique: Cet article a été écrit à l'origine le 6 novembre 2010, lorsque l'écosystème du serveur d'applications Ruby était limité. J'ai mis à jour cet article le 15 mars 2013 avec toutes les dernières mises à jour de l'écosystème.
Avertissement : je suis l'un des auteurs de Phusion Passenger, l'un des serveurs d'applications.
Apache vs Nginx
Ce sont deux serveurs Web. Ils peuvent servir des fichiers statiques mais - avec les bons modules - peuvent également servir des applications Web dynamiques, par exemple celles écrites en PHP. Apache est plus populaire et a plus de fonctionnalités, Nginx est plus petit et plus rapide et a moins de fonctionnalités.
Ni Apache ni Nginx ne peuvent servir les applications Web Ruby prêtes à l'emploi, pour ce faire, vous devez utiliser Apache / Nginx en combinaison avec une sorte de module complémentaire, décrit plus loin.
Apache et Nginx peuvent également agir en tant que proxys inversés, ce qui signifie qu'ils peuvent prendre une requête HTTP entrante et la transmettre à un autre serveur, qui parle également HTTP. Lorsque ce serveur répond avec une réponse HTTP, Apache / Nginx retransmet la réponse au client; Vous découvrirez plus tard pourquoi cela est pertinent.
Mongrel et autres serveurs d'applications de production vs WEBrick
Mongrel est un "serveur d'applications" Ruby: Concrètement, cela signifie que Mongrel est une application qui:
Cependant Mongrel est assez daté, de nos jours il n'est plus entretenu. Les nouveaux serveurs d'applications alternatifs sont:
Je les couvrirai plus tard et décrirai en quoi ils diffèrent les uns des autres et de Mongrel.
WEBrick fait la même chose que Mongrel, mais les différences sont les suivantes:
Le serveur d'applications et le monde
Tous les serveurs d'applications Ruby actuels parlent HTTP, mais certains serveurs d'applications peuvent être directement exposés à Internet sur le port 80, d'autres non.
Pourquoi certains serveurs d'applications doivent-ils être placés derrière un proxy inverse?
Pourquoi certains serveurs d'applications peuvent-ils être directement exposés à Internet?
Comparaison des serveurs d'applications
Dans cette section, je vais comparer la plupart des serveurs d'applications que j'ai mentionnés, mais pas Phusion Passenger. Phusion Passenger est une bête tellement différente des autres que je lui ai donné une section dédiée. J'ai également omis Trinidad et TorqueBox parce que je ne les connais pas assez bien, mais ils ne sont pertinents de toute façon que si vous utilisez JRuby.
Passager Phusion
Phusion Passenger fonctionne très différemment de tous les autres. Phusion Passenger s'intègre directement dans Apache ou Nginx, et peut donc être comparé à mod_php pour Apache. Tout comme mod_php permet à Apache de servir des applications PHP, presque comme par magie, Phusion Passenger permet à Apache (et aussi Nginx!) De servir des applications Ruby, presque comme par magie. L'objectif de Phusion Passenger est de tout faire fonctionner avec le moins de tracas possible.
Au lieu de démarrer un processus ou un cluster pour votre application et de configurer Apache / Nginx pour servir des fichiers statiques et / ou inverser les demandes de proxy au processus / cluster avec Phusion Passenger, vous devez seulement:
Toute la configuration est effectuée dans le fichier de configuration du serveur Web. Phusion Passenger automatise à peu près tout. Il n'est pas nécessaire de démarrer un cluster et de gérer les processus. Démarrage / arrêt des processus, redémarrage en cas de panne, etc. - le tout automatisé. Comparé à d'autres serveurs d'applications, Phusion Passenger a beaucoup moins de pièces mobiles. Cette facilité d'utilisation est l'une des principales raisons pour lesquelles les gens utilisent Phusion Passenger.
Contrairement à d'autres serveurs d'applications, Phusion Passenger est principalement écrit en C ++, ce qui le rend très rapide.
Il existe également une variante Enterprise de Phusion Passenger avec encore plus de fonctionnalités, telles que les redémarrages automatiques en continu, la prise en charge du multithreading, la résistance aux erreurs de déploiement, etc.
Pour les raisons ci-dessus, Phusion Passenger est actuellement le serveur d'applications Ruby le plus populaire, alimentant plus de 150000 sites Web, y compris de grands sites tels que New York Times, Pixar, Airbnb, etc.
Phusion Passenger vs autres serveurs d'applications
Phusion Passenger offre beaucoup plus de fonctionnalités et offre de nombreux avantages par rapport aux autres serveurs d'applications, tels que:
Les charges de travail auxquelles Unicorn n'est pas bon sont:
Le modèle d'E / S hybride de Phusion Passenger Enterprise 4 ou version ultérieure en fait un excellent choix pour ce type de charges de travail.
Il y a plus de fonctionnalités et d'avantages, mais la liste est vraiment longue. Vous devez vous référer au manuel de passagers de Phusion complète ( Apache version , la version Nginx ) ou le site Web du passager Phusion pour information.
Modèles de concurrence d'E / S
Un article a récemment été publié sur le blog Phusion sur l'optimisation optimale du nombre de processus et de threads en fonction de votre charge de travail. Voir Réglage des paramètres de concurrence de Phusion Passenger .
Capistrano
Capistrano est quelque chose de complètement différent. Dans toutes les sections précédentes, "déploiement" fait référence au fait de démarrer votre application Ruby sur un serveur d'applications, afin qu'elle devienne accessible aux visiteurs, mais avant que cela ne se produise, il faut généralement effectuer un travail de préparation, tel que:
Dans le contexte de Capistrano, le «déploiement» fait référence à tout ce travail de préparation. Capistrano n'est pas un serveur d'applications. Au lieu de cela, c'est un outil pour automatiser tout ce travail de préparation. Vous dites à Capistrano où se trouve votre serveur et quelles commandes doivent être exécutées chaque fois que vous déployez une nouvelle version de votre application, et Capistrano se chargera de télécharger l'application Rails sur le serveur pour vous et d'exécuter les commandes que vous avez spécifiées.
Capistrano est toujours utilisé en combinaison avec un serveur d'applications. Il ne remplace pas les serveurs d'applications. Inversement, les serveurs d'applications ne remplacent pas Capistrano, ils peuvent être utilisés en combinaison avec Capistrano.
Bien sûr, vous n'avez pas besoin d'utiliser Capistrano. Si vous préférez télécharger votre application Ruby avec FTP et exécuter manuellement les mêmes étapes de commandes à chaque fois, vous pouvez le faire. D'autres personnes en ont eu assez, alors elles automatisent ces étapes à Capistrano.
la source