3

ruby 用にさまざまなアプリをマウントするより良い方法はどれだろうと思っていました。2 つのsinatra アプリと 1 つの rails アプリがあります。

1 つの方法は、レールをベースとして使用し、routes.rb(レール内で)を使用してシナトラ アプリをマウントすることです。

RailsApp::Application.routes.draw do
  mount SinatraApp1, :at => "/url1"
  mount SinatraApp2, :at => "/url2"
  # rest of the rail routes
end

このようにして、両方のsinatraアプリがレールにあります。

他の方法は、ラックアップを使用して3つすべてをマウントすることconfig.ruです(3つのアプリすべてを並行して)

map "/" do
  run RailsApp::Application
end

map "/url1" do
  run SinatraApp1
end

map "/url2" do
  run SinatraApp2
end

どちらの方法が他の方法よりも優れているか、どの方法がどのような理由で優れているかを見つけることができません。

4

1 に答える 1

3

興味深いことに、後半(ラックアップを使用してマウントされたアプリケーション)であるという事実を除けば、大きな違いがあります。

への要求

/url1

/url2

レールのミドルウェア スタックで実際に要求を渡すことなく、マウントされたラック アプリケーションから直接サーバーになり、指定されたマウントされたパスの有効なラック アプリケーションを検出します。

あなたのsinatraアプリケーションがroutes.rbあなたのファイルで定義されたRails内にマウントされている最初の部分で起こります

したがって、私はmountあなたのsinatraアプリケーションをroutes.rb代わりにしようとしていますが 、ルーティングミドルウェアが目的のsinatraアプリケーションにリクエストを渡したときに適切なパスを検出する場所にリクエストが渡されるconfig.ruという事実を考慮してください rails middleware stack

これに対して実行できる簡単なチェックは、パス、つまり/url1、または/url2両方の手法を試してみることです。sinatra アプリケーションの routes.rb はリクエストを Rails アプリケーションに記録しますが、他のアプリケーションはログに記録しません。

この助けを願っています

于 2012-06-23T08:39:56.550 に答える