2017-05-31 10 views
0

非常に大きなレールアプリケーションを構築し、エンジンを使ってメインアプリケーションから「モジュール」を分離することを検討しています。宝石としてのレールエンジンを構築するためのワークフロー

私たちはgemモーターヘッドを使用して小型エンジンを作成することでこのプロセスを開始しました(active_ifコンポーネントが必要です)。 そのエンジンは、メインアプリから削除され、git initが与えられ、githubにプッシュされました。

メインアプリケーションは、Gemfile内で宝石を引き出すことができました。

概念の証明の間、それは動作しますが、それほど効率的ではありません。また、新しいエンジン/宝石を更新することは、ある意味ではサブモジュールであるため、やや面倒です。このようなモジュール型のアプリケーションを構築するときにエンジン/宝石を構築し、維持するための適切なワークフローは何ですか?モジュールとして宝石やエンジンの展開について、事前

+0

エンジンの宝石を取り込んでメインのRailsアプリに埋め込むことができます。たとえば、 'app/engines'や' lib/engines'の下にあります。あなたのGemfileを使ってその相対パスからgemを直接ロードすることができます( 'path:'オプションを使って)。これにより、すべてが1つのリポジトリに保存されますが、論理的に完全に分離されます。必要に応じて、各エンジンを実際の宝石に完全に抽出することもできます。 –

+0

ありがとうロバート、そしてええ、我々は両方のオプションを試しました。主な質問は、彼らが完全に宝石を分け合わせるようにしたいのであれば、それをどのように発展させるのが最善でしょうか?すなわち、彼らは現在、gemfileなどを持っていないし、レールサーバ経由で単独で起動することはできません。また、宝石に変更が加えられたとき(開発途中)、メインアプリケーションの再起動や宝石のスプリングが必要になる – Rockman

+0

コメントはSOAではなくモノリスの引数です。 DHHの方針:https://m.signalvnoise.com/the-majestic-monolith-29166d022228 – toddmetheny

答えて

0

最もakward部分で

おかげで更新する常に必要です。私たちは、使用して多くの成功を持っていた:

bundle config local.my_gem ~/projects/my_gem/

それはGemfileとGemfile.lockを変更することなく、ディスク上の宝石/エンジンのバージョンを指します。これにより

bundle config --delete local.my_gem ~/projects/my_gem/

あなたはGemfile.lockは、デプロイメント時に更新する必要がある時間を制限することができるはずです:ローカルオーバーライドの実行を削除するには

関連する問題