2012-08-25 6 views
8

VPSサーバー上に複数の(> 2)小型Rackベースのアプリケーションを実行したいと考えています。1台のサーバーで複数の小さなRuby(Rack)アプリを実行するにはどうすればいいですか?

Railsアプリは伝統的なペア "Unicorn + nginx"を使用しており、VPSマシン上にあるほとんどのRAMリソースが必要です。

私は、各アプリケーションで同様のUnicorn構成を追加しようとしましたが、RAMリソースの不足につながりました。

私の質問は、一度にすべてのSinatraアプリケーションを実行できる小さなトリッキーなメモリ節約サーバーをセットアップすることですか?

UPDATE:重要な場合は、パフォーマンスについてはあまり気にしません。これらのアプリは、深刻な仕事をするつもりはありません。

UPDATE2:Nginxと共有するソケットに基づくアプローチは、ポートを持つものより優先されます。

ありがとうございます!

+0

メインアプリと同じユニコーンでアプリを実行してみませんか?ラックアップファイルにルートをハックするだけです。 – Catnapper

+0

はい、私もこれについて考えました。ミドルウェアチェーンの設定についても同様です。この問題は、論理的な不一致を招くことになります。私のすべてのアプリケーションは、相互に関連していません。 –

+0

ここで面白いのは、「1台のサーバーに複数の小型ラックアプリを持つ」アプローチを見つけることです。私はそれが一般的に可能であるかどうか知りたい。 –

答えて

5

私はこの質問を自分自身で調査しました。私は、私の小さなアプリケーションを一度に実行する1つのWebサーバーを持つことができるソリューションを見つけたと思います。

それは、RackStackレミ・テイラー(Githubの上@remihttps://github.com/remi/rack-stackによって作成された未-宝石に基づいています。

RackStackはRack :: Builderのインスピレーションを受けています。このようなタスクを達成するのにも良いと思われます.RackStackは同じ方向に進み、「スタック」機能を抽象的な方法で使い分けました。

ここでは、2つのサンプルアプリケーション(SinatraとRack):https://github.com/stanislaw/skeletons/tree/master/rack_stackで構成されたRackStackのデモを紹介します。実サーバ上でスタックアプリケーションの動作を模倣するために、/ etc/hostsファイルを変更してlocalhost2ホストが127.0.0.1を指すようにしました。

シンサーバーを起動してから、localhostまたはlocalhost2で要求を実行します。「localhost」への要求はFirstAppによって提供され、SecondAppによって「localhost2」に送信されます。

実際のサーバーでアプリケーションをテストするときに表示される問題は予期できませんが、このアプローチは正確に私が探していたものと思われます。実際のサーバーではNginx私のラックのアプリケーションに関連付けられているすべてのホストに、Thinサーバーが聞いたソケットに要求を渡します。そのため、RackStackは自分のスタックにあるアプリ宛てのリクエストのみを処理します。

このスキームや代替案の改善点はありますか?

関連する問題