2012-08-25 5 views
8

Ich möchte mehrere (> 2) winzige Rack-basierte Apps auf meinem VPS-Server ausführen, auf dem bereits eine große Rails-App läuft.Wie können Sie mehrere kleine Ruby (Rack) -Apps auf einem Server ausführen?

Rails App verwendet traditionelle Paar "Unicorn + Nginx" und es erfordert die meisten RAM-Ressourcen, die ich auf meinem VPS-Rechner habe.

Ich habe versucht, ähnliche Unicorn-Konfigurationen für jede App hinzufügen, und es führte mich zu der Unzulänglichkeit der RAM-Ressourcen.

Also meine Frage ist: ist es möglich, einen kleinen kniffeligen Speicher sparenden Server einzurichten, der es erlaubt, alle Sinatra-Apps gleichzeitig laufen zu lassen?

UPDATE: falls es darauf ankommt, ist mir die Leistung egal. Diese Apps sind nicht dazu gedacht, ernsthafte Aufgaben zu erledigen.

UPDATE2: Ein Ansatz, der auf Sockets basiert, die mit Nginx geteilt werden, wird gegenüber dem mit Ports bevorzugt.

Danke!

+0

Warum nicht die Anwendungen auf den gleichen Einhörnern wie die Hauptanwendung ausführen? Hacken Sie einfach die Routen in die Rackup-Datei. – Catnapper

+0

Ja, darüber habe ich auch nachgedacht. Sowie über die Einrichtung einer Middlewares-Kette. Das Problem - dies führt zu einer logischen Inkonsistenz - alle meine Apps sind in keiner Weise miteinander verwandt. –

+0

Interessant ist hier, einen Ansatz zu finden, mehrere 'kleine Rack-Apps auf einem Server' zu haben. Ich möchte wissen, ob es überhaupt möglich ist. –

Antwort

5

Ich habe diese Frage selbst untersucht und ich denke, dass ich eine Lösung gefunden habe, die es mir ermöglicht, auf einem Webserver alle meine kleinen Apps gleichzeitig laufen zu lassen.

Es basiert auf RackStack noch nicht a-Juwel von Remi Taylor erstellt (@remi auf Github) https://github.com/remi/rack-stack.

RackStack wurde von Rack :: Builder inspiriert, was auch für eine solche Aufgabe gut geeignet scheint - RackStack geht einfach in die gleiche Richtung weiter und abstrahiert die "Stack" -Funktionalität auf eine Weise, die ich sehr schön und praktisch fand.

Hier ist eine Demonstration von RackStack, die aus zwei Beispiel-Apps (Sinatra und Rack) besteht: https://github.com/stanislaw/skeletons/tree/master/rack_stack. Um das Stack-App-Verhalten auf einem echten Server nachzuahmen, habe ich meine/etc/hosts-Datei so modifiziert, dass localhost2-Host auf 127.0.0.1 zeigt.

Ich fire Thin Server und dann Anfragen auf localhost oder localhost2: die Anfragen an "localhost" werden von FirstApp, "localhost2" von SecondApp bedient.

Ich kann jetzt keine Probleme vorhersehen, die auftreten können, wenn ich meine Apps auf einem echten Server testen will, aber jetzt scheint dieser Ansatz genau das zu sein, wonach ich gesucht habe: Ich stelle mir vor, dass auf einem echten Server Nginx Überträgt Anfragen an alle Hosts, die mit meinen Rack-Apps verbunden sind, an einen Socket, der von Thin Server gehört wird. RackStack erfüllt also nur die Anforderungen, die an die Apps in meinem Stack gerichtet sind.

Alle Vorschläge, Verbesserungen dieses Schemas oder Alternativen werden immer noch geschätzt!