4

実際に質問を定式化するのは難しいので、状況を説明するだけです。

複数のサブアプリケーションで構成されるアプリケーションに取り組んでいます。メイン アプリは、ナビゲーション バーと、ユーザーや権限の構成などのいくつかの基本的な機能を提供するだけであり、サブ アプリケーションは実際の機能を提供します。

これはRails 2アプリケーションで、サブアプリケーションはフレームに埋め込まれています。これはあまり良いデザインではなく、セットアップがかなり複雑です。幸いなことに、現在エンジンがあり、それがこのアプリケーションのより健全なソリューションになります。

これまではすべてが subversion にあり、一度に更新できました。共有コードは外部を使用します。再構築とリファクタリングを行っている間に、git に移行したいと考えています。ここ数日、バンドラー、git サブモジュール、および git サブツリーについて Web を検索してきましたが、複数のエンジン/ジェムで構成される大規模なプロジェクトを、それらすべてで開発しているときに適切に管理する方法についての適切な説明が見つかりませんでした。同時に。

特に、次のことができるようになりたいです。

  • Bundler を使用して依存関係を管理する
  • 独自の Gem とエンジンをグローバル gem パスにインストールするのではなく、git リポジトリとしてメイン アプリに相対的にインストールする
  • 独自の Gem と Engine を git リポジトリとしてセットアップする (おそらく Bundler のローカル パス オーバーライドを使用)
  • 独自の Gem とエンジンの最新バージョンをプルするすべての依存関係 (バンドル インストール) を取得する簡単な方法。それが不可能な場合は、すべての独自の Gem とエンジンを git pull する 1 つのコマンド (おそらく rake タスク?)
  • 新しい開発者が開発環境全体をすばやく簡単にセットアップできるようにします (アプリを git clone し、すべての独自の Gem とエンジンを含む依存関係をローカルにバンドルします)。
  • カピストラーノで簡単にデプロイ

私がすでに考えたこと:

  • すべてを 1 つのリポジトリに含めることは、個別の Gem/エンジンの目的を無効にしているように思えます。また、Bundler を介してエンジン上のメイン アプリの依存関係を管理することもできないと思います。
  • サブモジュールを使用して、なぜそれが悪いのかについてあまりにも多くの投稿を読みました。私たちの開発者の数では、誰かがサブモジュール ポインターを自分のローカル リポジトリにのみ存在するコミットにコミットするのは時間の問題です。
  • git subtree ユーティリティ、私にはかなり複雑に思えます

では、似たような設定をしている方はいますか?更新と変更のコミットをできるだけ簡単にするために、どのように管理していますか? アプリケーションが依存する Engine/Gem コードをどこに置きますか?

TL;DR複数の Engine と Gem で構成される大規模な Rails プロジェクトを管理するにはどうすればよいですか?

4

2 に答える 2

4

私の会社でも同様の (しかしおそらくそれほど複雑ではない) ケースがあります。私たちが(今のところ)行っていることは、あなたにも役立つ可能性があります:

Rails アプリを独自の git リポジトリに配置します。さまざまな gem もそれぞれ独自のリポジトリを取得します (別の方法で行うこともできますが、「1 つの gem = 1 つの git リポジトリ」を使用すると作業が楽になります)。

次に、Rails アプリの Gemfile には、いくつかのオプションがあります。

  • デフォルトでは、各gemをそのgitリポジトリに参照する必要があります(バンドルがそこからそれらをロードするように)
  • 一部の gem と Rails アプリをローカルで作業する場合は、Gemfile をローカル パス ( http://gembundler.com/v1.2/gemfile.html ) を使用するように変更するか、ローカルでパスをオーバーライドしてより適切に変更します (以下を参照)。http://gembundler.com/v1.2/git.html )。これら 2 つのオプションは異なることに注意してください。最初のオプションはパスを使用し、2 番目のオプションはローカルの git リポジトリを使用します (したがって、コミットされていない新しい変更は、2 番目ではなく最初のオプションで表示されます)。

すべての gem を簡単に更新するために、小さな .sh スクリプトを作成し (さまざまなクローンまたは更新操作とバンドル インストールを起動して、すべてがクリーンになるようにします)、それをメイン アプリでコミットします。また、手順を簡単にするために、チーム内で「標準的なフォルダー構成」を採用します (つまり、全員が選択した基本フォルダーを使用し、その下に Rails アプリと各 gem 用のフォルダーを配置する)。

これがあなたのアイデアに役立つか、または得られることを願っています(あなたの質問は非常に複雑で多様であるため、これがあなたが探しているものであると100%確信していません)。

于 2013-02-15T07:56:36.197 に答える
1

Gemの依存関係を管理する方法は?
Gemfileを介したBundler。

エンジンを管理する方法は?
Gemfileを介したBundler。
エンジンをGemsとして設計し、Gemfileでgitリポジトリの場所を指定します。例が必要な場合は、https: //github.com/radar/foremgemをGemfileに含める方法を確認してください。

また、これはRailsエンジン(http://edgeguides.rubyonrails.org/engines.html )を学ぶのに役立ちました。

あなたはジャバランドから来ていますか?
Railsには学習曲線がありますが、Javaの山の崖が落ちるのとは異なります。

于 2012-12-11T07:59:41.987 に答える