2

クラシックスタイルのSinatraアプリがあり、それにモジュラーアプリを追加していuse MyModularAppます。

これは正常に機能し、クラシックアプリを実行すると、クラシックアプリとモジュラーアプリの両方からのルートを利用できます。問題は、モジュラーアプリからのルートが最初に検索され、次にクラシックアプリからのアプリが検索されるように見えることです。逆の振る舞いをしたいのですが。どうすればそれを達成できますか?

4

2 に答える 2

4

Sinatraアプリケーションは、Rackミドルウェアとしても、それ自体でアプリケーションとしても使用できます。モジュールをミドルウェアスタックに追加すると、メインアプリケーションの前にリクエストが表示されますuse MyModularApp。これは、ソースファイルにメソッドがある場合は常に発生します。use

ミドルウェアとして機能する場合、現在のアプリで一致するルートがない場合、Sinatraアプリはリクエストをスタックに転送します。そのため、現在の動作が表示されます。

not_found必要に応じて機能させる1つの方法は、モジュラーアプリを呼び出すカスタムハンドラーを設定することです。

not_found do
  MyModularApp.call(env)
end

これで、メインアプリにリクエストに一致するルートがない場合、モジュラーアプリが呼び出されます。

于 2013-02-15T04:05:19.700 に答える
0

シナトラのドキュメントによると:

ルートは、定義された順序で照合されます。要求に一致する最初のルートが呼び出されます。

于 2013-02-15T02:33:43.257 に答える