クラシックスタイルのSinatraアプリがあり、それにモジュラーアプリを追加していuse MyModularApp
ます。
これは正常に機能し、クラシックアプリを実行すると、クラシックアプリとモジュラーアプリの両方からのルートを利用できます。問題は、モジュラーアプリからのルートが最初に検索され、次にクラシックアプリからのアプリが検索されるように見えることです。逆の振る舞いをしたいのですが。どうすればそれを達成できますか?
Sinatraアプリケーションは、Rackミドルウェアとしても、それ自体でアプリケーションとしても使用できます。モジュールをミドルウェアスタックに追加すると、メインアプリケーションの前にリクエストが表示されますuse MyModularApp
。これは、ソースファイルにメソッドがある場合は常に発生します。use
ミドルウェアとして機能する場合、現在のアプリで一致するルートがない場合、Sinatraアプリはリクエストをスタックに転送します。そのため、現在の動作が表示されます。
not_found
必要に応じて機能させる1つの方法は、モジュラーアプリを呼び出すカスタムハンドラーを設定することです。
not_found do
MyModularApp.call(env)
end
これで、メインアプリにリクエストに一致するルートがない場合、モジュラーアプリが呼び出されます。
シナトラのドキュメントによると:
ルートは、定義された順序で照合されます。要求に一致する最初のルートが呼び出されます。