Как запустить несколько крошечных приложений Ruby (Rack) на одном сервере?

Я хочу запустить несколько (>2) крошечных приложений на основе стойки на моем сервере VPS, на котором уже работает одно большое приложение Rails.

Rails app использует традиционную пару "Unicorn + nginx", и для этого требуется большая часть ресурсов ОЗУ, которые у меня есть на моей машине VPS.

Я попытался добавить аналогичные конфигурации Unicorn для каждого приложения, и это привело меня к недостаточности ресурсов ОЗУ.

Итак, мой вопрос: Можно ли настроить один небольшой хитрый сервер сохранения памяти, который позволит запускать все приложения Sinatra сразу?

UPDATE: в случае, если это имеет значение, я не очень забочусь о производительности. Эти приложения не предназначены для серьезной работы.

UPDATE2: подход, основанный на сокете, совместно используемом с Nginx, предпочтительнее подхода с портами.

спасибо!

1 ответов


Я сделал свое собственное исследование этого вопроса, и я думаю, что нашел решение, которое позволит мне иметь один веб-сервер, на котором работают все мои крошечные приложения сразу.

Он основан на RackStack еще не-Жемчужина, созданная Реми Тейлор ( @remi на Github)https://github.com/remi/rack-stack.

RackStack вдохновлен Rack:: Builder, который также, кажется, хорош для выполнения такой задачи - RackStack просто идет в том же направление далее, абстрагируя функциональность "стека" таким образом, что я нашел очень приятным и удобным.

вот демонстрация RackStack, которая состоит из двух примеров приложений (Sinatra и Rack):https://github.com/stanislaw/skeletons/tree/master/rack_stack. Чтобы имитировать поведение приложения стека на реальном сервере, я изменил файл /etc/hosts, чтобы хост localhost2 указывал на 127.0.0.1.

Я запускаю тонкий сервер, а затем запускаю запросы на localhost или localhost2: запросы на "localhost" обслуживаются FirstApp, на "localhost2" SecondApp.

теперь я не могу предвидеть никаких проблем, которые могут возникнуть, когда я буду тестировать свои приложения на реальном сервере, но теперь этот подход кажется именно тем, что я искал: я представляю, что на реальном сервере Nginx будет передавать запросы всем хостам, связанным с моими приложениями rack, в сокет, прослушиваемый тонким сервером. Так, RackStack будут отвечать только те запросы, которые адресованы приложения, у меня в стек.

любые предложения, улучшения этой схемы или альтернативы до сих пор!