3

私は小さなチームで働いており、内部使用のためにいくつかの gem を開発しました。これらの gem はさまざまに相互依存しており、私の Github アカウントでホストされています。これらの gem への依存関係を宣言するときは、常に : を宣言しGemfileます:git => 'url/for/gem/on/github'。しかし、Bundler からいくつかの紛らわしい動作が発生しています。次のように考えます。

  • gem A が A の Gemfile で github-hosted B に依存し、宣言している場合
  • B は、B の Gemfile で github にホストされた C に依存し、宣言します。
  • それから私がAから逃げるときbundle install...
  • A の Gemfile で宣言されているように、Bundler は github から B をフェッチする必要があります。
  • 次に、B の Gemfile で宣言されているように、github から C を取得します

しかし、Bundler は、C が見つからないと文句を言います。C を A のGemfile適切な場所で宣言すると、文句を言いません。Bundler は実際には依存関係Gemfileをまったく見ておらず、単に依存関係を調べているだけだと推測するのは正しいgemspecですか? そして、もしそうなら、私が説明する問題に対して、 C を A の依存関係として直接 A に宣言するよりも良い解決策はありGemfileますか?

更新: Github アカウントを で gem ソースとして宣言できればGemfile、この問題は解決されるようです。これは可能ですか?

4

1 に答える 1

2

私たちは最近、相互に依存する内部の gem と非常によく似た状況に取り組む必要がありました。すでに内部 git ホスト (GitLab) を使用していましたが、gemspec でバンドル スタイルgit:branch:属性を宣言できないという同じ問題がありました。

私たちにとっての解決策は、内部の gem ホスティングもセットアップすることでした。geminabox を使用すると、非常に簡単に gem ホストを起動して実行できます。Web サービス用のフォルダーを実行gem install geminaboxして作成します (パッセンジャー、ymmw を使用します)。

gems/
  public/
  tmp/
    restart.txt
  gems/
  config.ru

編集は次のconfig.ruようになります。

require "rubygems"
require "geminabox"

Geminabox.data = "gems"
run Geminabox

そして、gems/public フォルダーにパッセンジャーを向けると、通常のラック アプリとして起動し、遊ぶことができます。gemfiles 内のサービスに URL を追加するだけで、内部 gem の git 問題全体をスキップできます。それが私のアドバイスです :)

geminabox の詳細については、https ://github.com/geminabox/geminabox の github ページを参照してください。

于 2013-07-23T14:53:06.717 に答える