Rails エンジン: 2 セットのルートをエクスポートする

概要

Rails エンジン MyGreatEngine を gem mge で定義しています。このエンジンは、API に関連するルートと静的ファイルに関連するルートの 2 種類のルートを提供します。

2 セットのルートをエクスポートしたいと考えています。1 つは API 用、もう 1 つは静的ファイル用です。これにより、このエンジンを使用するアプリケーションのさまざまな場所にそれらをマウントできるようになります。たとえば、これらのルートをそれぞれ /api/ と /static にマウントすることができ、別のルートは /api/v1/ と /staticfiles/ にマウントすることができます。

ルートを分割する方法が見つからないので、選択肢は 2 つだけです。2 つの別々のエンジンを定義し、それらの共有ビットを実装する 3 番目の gem を定義するか、エンジンを / にマウントしてその機能を放棄するかのどちらかです。アプリケーションのプレフィックスをカスタマイズします (そのため、すべてのアプリケーションは /api/ と /static/ を使用します)。私の観点からすると、これらのアプローチは両方とも問題があります。

解決策

エンジンごとに個別の gem を作成する必要はありません。 1 つの gem に複数のエンジンを含めることができます。それらのルートを個別に指定し、他の機能を簡単に共有できます。

MyGreat::APIEngine.routes.draw do
  # ...
end

MyGreat::StaticEngine.routes.draw do
  # ...
end

これは追加設定なしですぐに動作するはずだと確信しています。