Estoy intentando saber cómo servir mi app con Apache pero no termino de comprender cómo hacerlo o si es necesario.
Se puede usar simplemente WEBrick? Por ahí he estado viendo tutoriales de cómo desplegar mi app con thin+nginx... No merma el rendimiento de la aplicación el tener que comunicarse estos dos servidores para responder a las peticiones?
Buenas,
De primeras decirte que posiblemente sea más novato que tú en Rails pero te cuento lo que sé.
WEBrick es un servidor integrado en Rails para desarrollo y debug. Si no me equivoco es mono-hilo así que hazte una idea del posible rendimiento en un entorno de producción.
La combinación que comentas de Thin+Nginx es tan válida como cualquier otra con Apache, Passenger, Unicorn...etc Prueba la que mejor te venga, más fácil te resulte de instalar o la que mejor te venga con un entorno IC como puede ser Capistrano. Para mis pruebas de concepto (aún estoy en eso) utilizo Apache + Passeger (https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html) junto Capistrano + Git.
Respecto al rendimiento, digamos que ambos servidores trabajan en simbiosis encargándose de distintos aspectos: Apache actúa como frontal HTTP procesando las peticiones/respuestas mientras que Passenger se encarga de procesar el código Ruby que Apache por si solo no puede/sabe interpretar. Una explicación mejor: http://stackoverflow.com/questions/17692972/why-use-passenger-with-apache
Seguro que viene alguien con más idea a darte más luz.
Parece ser que me voy a quedar con Passenger ya que vengo de PHP, estoy bastante familiarizado con Apache y esto se parece más a un "mod_ruby" por así decirlo.
No se si sera exactamente tu duda:
La combinacion de servidor web 'tradicional' como apache o nginx se encargaran de servir contenido estatico (imagenes, css, JS, etc) el resto de las peticiones dinamicas las redirecciona apache o nginx a un 'servidor ruby' (todos basados en una API comun llamada Rack: http://rack.github.io/ ) como puede ser webrick, puma, unicorn, thin, y otros tantos, que seran los que interpreten tu codigo en ruby. Es decir, por ejemplo apache recibe todas las peticiones y envia el contenido estatico que pueda y el contenido dinamico le 'pasa el muerto' al servidor rack que se tercie.
Realmente no seria necesiario que usaras ni apache, ni nginx y que pongas thin o webrick en tu caso a servir todos los contenidos. Pero apache y nginx funcionan mejor por razones historicas para estos menesteres, y no necesitas molestar al 'servidor ruby' con esas peticiones.
Cual elegir entre Thin, Puma, Webrick, etc? Cada uno tiene sus pros y sus contras, unos funcionan mejor que otros en dependiendo que implementacion de ruby. Otros gastan mas RAM, mas/menos peticiones por segundo, cuesta mas montarlos.. Como si comparas un Honda y un Peugeot.. Passenger es sencillo para instalar pero a mi no me termina demasiado..
Mira si quieres benchmars que hay varios en internet: Ej:
http://www.madebymarket.com/blog/dev/ruby-web-benchmark-report.html
En cuanto a deploy hay varias alternativas. Mi recomendacion es que para iniciarse y para cosas simples no te compliques la vida y tira de heroku o similar (no tienes que estar dandole vueltas a si nginx, apache, think o unicorn), subes el codigo y te olvidas. Pasa de heroku cuando quieras ahorrarte dinero o trastear. En cualquier caso para subirlo a dedicados o VPS's y en MRI te recomendaria Capistrano + Git como te ha recomendado Miguel. Para jRuby hay otras alternativas (y no es necesariamente mas complejo para hacer deploys)
Apache + passenger es perfectamente válido para producción (pero WEBrick no!!)
Nosotros usamos Nginx + Unicorn para tener "zero downtime" deploys, pero si controlas bastante Apache, probablemente no valga la pena buscar alternativas...
Estoy intentando saber cómo servir mi app con Apache pero no termino de comprender cómo hacerlo o si es necesario.
Se puede usar simplemente WEBrick? Por ahí he estado viendo tutoriales de cómo desplegar mi app con thin+nginx... No merma el rendimiento de la aplicación el tener que comunicarse estos dos servidores para responder a las peticiones?
09/02/2015 17:37
De primeras decirte que posiblemente sea más novato que tú en Rails pero te cuento lo que sé.
WEBrick es un servidor integrado en Rails para desarrollo y debug. Si no me equivoco es mono-hilo así que hazte una idea del posible rendimiento en un entorno de producción.
La combinación que comentas de Thin+Nginx es tan válida como cualquier otra con Apache, Passenger, Unicorn...etc Prueba la que mejor te venga, más fácil te resulte de instalar o la que mejor te venga con un entorno IC como puede ser Capistrano. Para mis pruebas de concepto (aún estoy en eso) utilizo Apache + Passeger (https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html) junto Capistrano + Git.
Respecto al rendimiento, digamos que ambos servidores trabajan en simbiosis encargándose de distintos aspectos: Apache actúa como frontal HTTP procesando las peticiones/respuestas mientras que Passenger se encarga de procesar el código Ruby que Apache por si solo no puede/sabe interpretar. Una explicación mejor: http://stackoverflow.com/questions/17692972/why-use-passenger-with-apache
Seguro que viene alguien con más idea a darte más luz.
Saludos.
10/02/2015 08:19
Parece ser que me voy a quedar con Passenger ya que vengo de PHP, estoy bastante familiarizado con Apache y esto se parece más a un "mod_ruby" por así decirlo.
10/02/2015 14:34
La combinacion de servidor web 'tradicional' como apache o nginx se encargaran de servir contenido estatico (imagenes, css, JS, etc) el resto de las peticiones dinamicas las redirecciona apache o nginx a un 'servidor ruby' (todos basados en una API comun llamada Rack: http://rack.github.io/ ) como puede ser webrick, puma, unicorn, thin, y otros tantos, que seran los que interpreten tu codigo en ruby. Es decir, por ejemplo apache recibe todas las peticiones y envia el contenido estatico que pueda y el contenido dinamico le 'pasa el muerto' al servidor rack que se tercie.
Realmente no seria necesiario que usaras ni apache, ni nginx y que pongas thin o webrick en tu caso a servir todos los contenidos. Pero apache y nginx funcionan mejor por razones historicas para estos menesteres, y no necesitas molestar al 'servidor ruby' con esas peticiones.
Cual elegir entre Thin, Puma, Webrick, etc? Cada uno tiene sus pros y sus contras, unos funcionan mejor que otros en dependiendo que implementacion de ruby. Otros gastan mas RAM, mas/menos peticiones por segundo, cuesta mas montarlos.. Como si comparas un Honda y un Peugeot.. Passenger es sencillo para instalar pero a mi no me termina demasiado..
Mira si quieres benchmars que hay varios en internet: Ej:
http://www.madebymarket.com/blog/dev/ruby-web-benchmark-report.html
En cuanto a deploy hay varias alternativas. Mi recomendacion es que para iniciarse y para cosas simples no te compliques la vida y tira de heroku o similar (no tienes que estar dandole vueltas a si nginx, apache, think o unicorn), subes el codigo y te olvidas. Pasa de heroku cuando quieras ahorrarte dinero o trastear. En cualquier caso para subirlo a dedicados o VPS's y en MRI te recomendaria Capistrano + Git como te ha recomendado Miguel. Para jRuby hay otras alternativas (y no es necesariamente mas complejo para hacer deploys)
10/02/2015 13:23
Nosotros usamos Nginx + Unicorn para tener "zero downtime" deploys, pero si controlas bastante Apache, probablemente no valga la pena buscar alternativas...
s2
26/03/2015 14:40
Al final he optado por passenger.
Perdonad si no os he trasmitido feedback acerca de vuestras respuestas antes.