Toda la cuestión de configurar un servidor de desarrollo para mi aplicación Ruby on Rails me confunde. Estoy seguro de que hay WEBrick, Mongrel, Passenger, Apache, Nginx y muchos más, y realmente no entiendo los diferentes roles que desempeñan.
Comencé a usar WEBrick, y ahora uso Mongrel para el desarrollo. ¿Son estos servidores independientes o se sientan frente a Apache?
He leído sobre Passenger y realmente no entiendo lo que es, el sitio dice "hace que la implementación de aplicaciones web de Ruby sea muy fácil", ¿reemplaza a Mongrel? ¿Es como Capistrano, que también implementa aplicaciones web?
Teniendo en cuenta que me gustaría probar SSL, y creo que no es compatible con mongrel, ¿cuál es la mejor configuración del servidor de desarrollo?
Gracias
Respuestas:
La palabra "despliegue" puede tener dos significados según el contexto. También está confundiendo los roles de Apache / Nginx con los roles de otros componentes.
Nota histórica: Este artículo se escribió originalmente el 6 de noviembre de 2010, cuando el ecosistema del servidor de aplicaciones Ruby era limitado. He actualizado este artículo el 15 de marzo de 2013 con todas las últimas actualizaciones del ecosistema.
Descargo de responsabilidad : soy uno de los autores de Phusion Passenger, uno de los servidores de aplicaciones.
Apache vs Nginx
Ambos son servidores web. Pueden servir archivos estáticos pero, con los módulos correctos, también pueden servir aplicaciones web dinámicas, por ejemplo, aquellas escritas en PHP. Apache es más popular y tiene más funciones, Nginx es más pequeño y más rápido y tiene menos funciones.
Ni Apache ni Nginx pueden servir aplicaciones web de Ruby listas para usar, para ello debe usar Apache / Nginx en combinación con algún tipo de complemento, que se describe más adelante.
Apache y Nginx también pueden actuar como servidores proxy inversos, lo que significa que pueden tomar una solicitud HTTP entrante y reenviarla a otro servidor, que también habla HTTP. Cuando ese servidor responde con una respuesta HTTP, Apache / Nginx reenviará la respuesta al cliente; Más adelante aprenderá por qué esto es relevante.
Servidores de aplicaciones de producción mestizos y otros vs WEBrick
Mongrel es un "servidor de aplicaciones" de Ruby: en términos concretos, esto significa que Mongrel es una aplicación que:
Sin embargo, Mongrel está bastante anticuado, hoy en día ya no se mantiene. Los servidores de aplicaciones alternativos más nuevos son:
Los cubriré más adelante y describiré en qué se diferencian entre sí y de Mongrel.
WEBrick hace lo mismo que Mongrel, pero las diferencias son:
El servidor de aplicaciones y el mundo.
Todos los servidores de aplicaciones Ruby actuales hablan HTTP, sin embargo, algunos servidores de aplicaciones pueden estar expuestos directamente a Internet en el puerto 80, mientras que otros no.
¿Por qué algunos servidores de aplicaciones deben colocarse detrás de un proxy inverso?
¿Por qué algunos servidores de aplicaciones pueden estar directamente expuestos a Internet?
Servidores de aplicaciones comparados
En esta sección compararé la mayoría de los servidores de aplicaciones que he mencionado, pero no Phusion Passenger. Phusion Passenger es una bestia tan diferente del resto que le he dado una sección dedicada. También he omitido Trinidad y TorqueBox porque no los conozco lo suficientemente bien, pero de todos modos solo son relevantes si usas JRuby.
Phusion Passenger
Phusion Passenger funciona de manera muy diferente a todos los demás. Phusion Passenger se integra directamente en Apache o Nginx, por lo que se puede comparar con mod_php para Apache. Al igual que mod_php permite que Apache sirva aplicaciones PHP, casi mágicamente, Phusion Passenger permite que Apache (¡y también Nginx!) Sirva aplicaciones Ruby, casi mágicamente. El objetivo de Phusion Passenger es hacer que todo funcione (tm) con la menor molestia posible.
En lugar de iniciar un proceso o clúster para su aplicación, y configurar Apache / Nginx para servir archivos estáticos y / o solicitudes de proxy inverso al proceso / clúster con Phusion Passenger solo necesita:
Toda la configuración se realiza dentro del archivo de configuración del servidor web. Phusion Passenger automatiza casi todo. No es necesario iniciar un clúster y administrar procesos. Iniciar / detener procesos, reiniciarlos cuando se bloquean, etc., todo automatizado. En comparación con otros servidores de aplicaciones, Phusion Passenger tiene muchas menos piezas móviles. Esta facilidad de uso es una de las principales razones por las cuales las personas usan Phusion Passenger.
Además, a diferencia de otros servidores de aplicaciones, Phusion Passenger está escrito principalmente en C ++, lo que lo hace muy rápido.
También hay una variante Enterprise de Phusion Passenger con aún más características, como reinicios automáticos, compatibilidad con subprocesos múltiples, resistencia a errores de implementación, etc.
Por las razones anteriores, Phusion Passenger es actualmente el servidor de aplicaciones Ruby más popular, con más de 150,000 sitios web, incluidos los grandes como New York Times, Pixar, Airbnb, etc.
Phusion Passenger frente a otros servidores de aplicaciones
Phusion Passenger ofrece muchas más funciones y muchas ventajas sobre otros servidores de aplicaciones, como:
Las cargas de trabajo en las que Unicornio no es bueno son:
El modelo híbrido de E / S en Phusion Passenger Enterprise 4 o posterior lo convierte en una excelente opción para este tipo de cargas de trabajo.
Hay más características y ventajas, pero la lista es realmente larga. Debe consultar el manual completo de Phusion Passenger ( versión Apache , versión Nginx ) o el sitio web de Phusion Passenger para obtener información.
Modelos de concurrencia de E / S
Recientemente se publicó un artículo en el blog de Phusion sobre cómo optimizar de forma óptima la cantidad de procesos y subprocesos dada su carga de trabajo. Consulte Configuración de concurrencia de Tuning Phusion Passenger .
Capistrano
Capistrano es algo completamente diferente. En todas las secciones anteriores, "implementación" se refiere al acto de iniciar su aplicación Ruby en un servidor de aplicaciones, de modo que sea accesible para los visitantes, pero antes de que eso suceda, uno normalmente necesita hacer un trabajo de preparación, como:
En el contexto de Capistrano, "despliegue" se refiere a hacer todo este trabajo de preparación. Capistrano no es un servidor de aplicaciones. En cambio, es una herramienta para automatizar todo ese trabajo de preparación. Le dice a Capistrano dónde está su servidor y qué comandos deben ejecutarse cada vez que implementa una nueva versión de su aplicación, y Capistrano se encargará de cargar la aplicación Rails en el servidor por usted y ejecutar los comandos que especificó.
Capistrano siempre se usa en combinación con un servidor de aplicaciones. No reemplaza a los servidores de aplicaciones. Viceversa, los servidores de aplicaciones no reemplazan a Capistrano, se pueden usar en combinación con Capistrano.
Por supuesto, no tienes que usar Capistrano. Si prefiere cargar su aplicación Ruby con FTP y ejecutar manualmente los mismos pasos de comandos cada vez, puede hacerlo. Otras personas se cansaron de eso, por lo que automatizan esos pasos en Capistrano.
fuente