web-dev-qa-db-ja.com

1台のサーバーでRailsのインスタンスをいくつ実行できますか?

私はRailsアプリにアプローチするための最良の方法を決定しようとしている開発者です。展開のためのいくつかのオプションを提供する必要があり、開発コストと長期ホスティングコストの両方を最小限に抑えようとしています。

斬新な技術マニュアルであれ、ソースコードであれ、複数の作成者が1つの「作業」で共同作業できるサイトを考えてみてください。 「ユーザー」は、チャプターを「チェックアウト」し、変更を加え、変更をマージして戻すことができます。ユーザーは、より多くのコンテンツにアクセスできるように、より高い評価でお互いの変更を評価します。これを「ソーシャルバージョン管理」と呼びましょう。

「作品」を区別できる単一のRailsアプリを作成することは可能ですが、コーディングの観点からは、各作品が独自のRailsアプリ。「マスター」アプリは、各作品サーバーインスタンスを作成/制御し、作成者を検索して作品を閲覧できるようにし、サイト所有者のレポートハブになります。今のところ、各作品がを使用する最も単純なスキームを想定します。ポート固有のURL:

Master - http://collabowork.it
My Novel - http://collabowork.it:3001
Some Manual - http://collabowork.it:3002
Another work - http://collabowork.it:3003

私の質問は、Railsが圧倒される前に、1つのボックスで実行できるインスタンスの数はいくつですか?コモディティサーバーで実行できるインスタンスの数を決定する方法はありますか?追加の作業を安価にスケールアウトできる別のオプションがあります(おそらくEC2など)。これは金儲けのベンチャーとして設計されていないため、これを展開するための最も安価な方法は何ですか(追加のコーディング作業を除く)。代替案を提供する前に、ある種のコスト分析を行いたいのですが、このようなサイズ設定を開始する方法がわかりません。

どんなアイデアや考えも大歓迎です。

2
todd

私はあなたが持っているものと非常に似たものを持っています。

1つのディレクトリに1つのアプリケーションがあります。このアプリケーションは、複数の異なるクライアント用に設定されています。各クライアント間の唯一の違いは、クライアントが使用するデータベースです。私たちがそれを設定したとき、私はクライアントごとに異なるポートを持つことはあまりきれいではないと判断したので、私たちは異なるアプローチを取りました。

ApacheはRailsシーンではあまり人気がないことは知っていますが、それでも優れたソフトウェアです。Apacheの名前ベースの仮想ホストを使用して、Passenger3とともにこの問題に取り組みました。新しいバージョンでは、同じアプリケーションディレクトリを使用して、仮想ホストごとにRailsEnvを定義できます。ディレクティブは「PassengerAppGroupName」と呼ばれます。

次のような仮想ホストが表示されます。

<VirtualHost _default_:80>
        ServerName preprod.xxxx.fr
        DocumentRoot /var/xxxx/current/public/
        TimeOut 5000

        # Passenger directives
        PassengerHighPerformance on
        PassengerAppGroupName "preprod"
        RailsEnv preprod
        # Logging
        ErrorLog /var/log/Apache2/preprod-error.log
        CustomLog /var/log/Apache2/preprod-access.log combined

</VirtualHost>

この例で問題が解決するはずだと思います。このソリューションでは、接続に使用されるHTTPホストを使用してアプリケーションを分離できます。

要約すると、「作品」のコードベースが同じであれば、このIMHOクリーンソリューションを使用できます。

編集:パフォーマンスの観点から、Apache/Passengerには512MBのRAMが必要です。それ以下のものはパフォーマンスの低下につながることがわかりましたが、YMMVです。仮想ホストを追加する場合、それ以上のRAM)が必要になるとは思いません。

1