2012-02-08 11 views
1

多くのローカルRailsアプリケーション間の連携が必要なシステムを計画中です。このデザインでは、グローバルアプリがこれらのサーバー間でRESTfulなリクエストを中継するように要求しています。Railsの分散リソース

たとえば、Teacherのリソースを含む、ローカルのRailsアプリケーションを持つ各学校を想像してみてください。私は教師へのアクセスを提供するグローバルアプリを/ school/42/teacher/3として提案しています。

グローバルサーバーの学校リソースには、各学校のアプリのベースURLのフィールドがありますので、 school_42_url/teacher/3へのリクエスト。

このデザインでは、学校サーバーを直接接続するのではなく、リレーする必要があります。

私はこれを達成するためのいくつかの方法を考えることができますが、Railsの初心者は「Railsの道」を理解できません。

  1. ActiveResourceは魅力的ですが、リクエストごとに設定するのではなく、固定された「サイト」を必要とするようです。

  2. ルーティングはおそらくURLグロビングで動作する可能性がありますが、これを実現する方法の例を参照する必要があります。

  3. 第3のアプローチはカスタムコントローラですが、これはRailsのようには感じられません。

を明確にするために、{school_id、teacher_id}の組み合わせはグローバルに一意であるが、教師の詳細を格納する必要はありませんグローバルサーバは、これらは、Webリソースとして扱われます。

コメントや歓迎です。

答えて

2

apis(xml、json)とNet::HTTPのようなライブラリを公開するには、クライアントアプリケーションでRESTfulアーキテクチャのrailsを使用して、サーバー(メイン)アプリからapisを呼び出す必要があります。

+0

それは探検する正しい方向のように感じます。ローカルサーバー上のRESTful apisは指定されたものです。私はNet :: HTTPを調べます。 グローバル/学校/ 42 /教師/ 3はどのレベルで解析する必要がありますか? Schools.find(42).urlを取得し、そのURLで/ teacher/3に呼び出しを中継するには、ARルックアップが必要です。私はスクールで未ルーティングコールを処理するコントローラを試してみます。 のような経路を設定した場合、 'SchoolDeslegate#delegate' と一致し、#delegateを実装してNet :: HTTPを使用すると、適切な経路にありますか? – Zaq

+0

あなたはRailsの3ウェイの[RESTの章](http://my.safaribooksonline.com/book/web-development/ruby/9780132480345/rest-resources-and-rails/ch03#X2ludGVybmFsX0ZsYXNoUmVhZGVyP3htbGlkPTk3ODAxMzI0ODAzNDUvNTU=)をチェックアウトする必要があり – rudolph9

+0

私はいくつかの進歩を遂げました...私が上で述べたルートが働いています、私は中継する正しいURIを構築したデリゲートメソッドを実装しています(正しいベースを取得するためにIDでスクールを探します)。 Net :: HTTP。次のステップでは、メソッドと本文をHTTP呼び出しにコピーするコードを記述します。これはより簡単になるはずです。デリゲートにメソッドを取得し、配置し、ポストし、削除し、そのメソッドにすべてルーティングするのではなく、それらのメソッドにルーティングする必要がありますか? – Zaq

0

Powのように聞こえるかもしれません。シンボリックリンクを介してスタックアプリケーションとレールアプリケーションのURLを設定することができます。これはレールモデルに適しており、指定されたマナーにあなたの独立したRESTfulアプリケーションを構築することを可能にするかもしれません。私は、独立したレールサーバーを一緒に動作させる方法であることを知っていますが、これは非常に低いオーバーヘッドのアプローチであり、テストや開発目的では少なくとも通り過ぎる方法かもしれません。

+0

迅速な対応に感謝します。それぞれの「学校」には独自のアプリケーションがあり、ローカルのリソースにアクセスできます。おそらくHerokuでホストされている、グローバルアプリの実装についての質問です。この場合Powがどのように役立つのかは分かりません。学校のアプリがグローバルアプリと同じ場所に配置されている場合、「教師」に1つのActiveRecordを使用する方が合理的で、アプリ間通信の必要性は生じません。 – Zaq

+0

これは、開発中に独立したアドレスでREST経由で通信する各アプリケーションをシミュレートすることができますが、それは可能ですが、それは素晴らしい開発ツールです。 Heroku上での展開に関しては、展開時にそれに応じてアドレスを更新します。私は、複数のレールにまたがってActiveRecordを共有することはできないと考えています。複数の独立したレールに共通の絶対的に単一の共通ActiveRecordアプリケーションno。 – rudolph9

+0

あなたの助けに感謝Kurt。この場合、モノリシックデータベースは適切なアプローチではありませんが、あるレベルではモノリシックなように感じるはずです。アプリのほとんどは「学校」内で動作しますが、時折のやりとりがあります...先生が別の学校を訪れると想像してください。 RESTでは、特定の実装を参照することなくリソースを説明するきっかけとなります。私はまだActiveResourceが抽象化の正しいタイプだと思っていますが、それは単一の固定リソースの前提に基づいています。あなたは今日何かを教えてくれました。私はあなたの意見を感謝します。 – Zaq