2012-08-25 10 views
8

Quiero ejecutar varias (> 2) minúsculas aplicaciones basadas en Rack en mi servidor VPS, que ya tiene una gran aplicación de Rails ejecutándose.¿Cómo ejecutar múltiples aplicaciones pequeñas de Ruby (Rack) en un servidor?

La aplicación Rails usa el par tradicional "Unicorn + nginx" y requiere la mayor cantidad de recursos de RAM que tengo en mi máquina VPS.

He intentado agregar configuraciones de Unicorn similares para cada aplicación y me ha llevado a la insuficiencia de recursos de RAM.

Así que mi pregunta es: ¿es posible configurar un pequeño y complicado servidor de almacenamiento de memoria que permita ejecutar todas las aplicaciones de Sinatra a la vez?

ACTUALIZACIÓN: en caso de que importe, no me importa demasiado el rendimiento. Esas aplicaciones no están destinadas a hacer ningún trabajo serio.

UPDATE2: se prefiere un enfoque basado en el socket compartido con Nginx sobre el que tiene puertos.

Gracias!

+0

¿Por qué no ejecutar las aplicaciones en los mismos unicornios que la aplicación principal? Simplemente piratear las rutas en el archivo de rackup. – Catnapper

+0

Sí, pensé en esto también. Además de establecer una cadena de middlewares. El problema - esto resultará en inconsistencia lógica - todas mis aplicaciones no están relacionadas entre sí de ninguna manera. –

+0

Lo interesante aquí es encontrar un enfoque para tener 'múltiples aplicaciones pequeñas de Rack en un servidor'. Quiero saber, si es posible en general. –

Respuesta

5

Hice mi propia exploración de esta pregunta y creo que encontré una solución que me permitirá tener un servidor web ejecutando todas mis pequeñas aplicaciones a la vez.

Se basa en RackStack todavía-no-a-joya creado por Remi Taylor (@remi en Github) https://github.com/remi/rack-stack.

RackStack está inspirado en Rack :: Builder, que también parece ser bueno para realizar una tarea como esta: RackStack va en la misma dirección aún más, abstrayendo la funcionalidad de "pila" de una manera que encontré muy agradable y práctica.

Aquí hay una demostración de RackStack que consta de dos aplicaciones de muestra (Sinatra y Rack): https://github.com/stanislaw/skeletons/tree/master/rack_stack. Para imitar el comportamiento de la aplicación de pila en un servidor real, modifiqué mi archivo/etc/hosts para que el host de host local apuntara a 127.0.0.1.

Aparece el servidor delgado y luego ejecuto las solicitudes en localhost o localhost2: las solicitudes a 'localhost' son atendidas por FirstApp, a 'localhost2' por SecondApp.

Ahora no puedo prever ningún problema que pueda aparecer, cuando probaré mis aplicaciones en un servidor real, pero ahora este enfoque parece ser exactamente lo que estaba buscando: me imagino que en un servidor real Nginx pasará las solicitudes a todos los hosts asociados con mis aplicaciones de rack a un socket escuchado por el servidor Thin. Entonces, RackStack solo cumplirá con aquellas solicitudes que están dirigidas a las aplicaciones que tengo en mi stack.

¡Aún se agradecen las sugerencias, las mejoras de este esquema o las alternativas!

Cuestiones relacionadas