web-dev-qa-db-ja.com

Ruby Gemspec Dependency:gitブランチの依存関係は可能ですか?

Mygem.gemspec内にgitブランチ依存関係がある可能性はありますか?

私は次のようなものを考えています:

gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'

...しかし、それは機能しません。

77
BBJ3

これは不可能であり、RubyGemsがgem開発者がgemにアクセスするために特定のバージョン管理システムをインストールすることをユーザーに要求できるようにするのはかなり手間がかかるため、決してありえないでしょう。 Gemsは、できるだけ多くのアプリケーションで使用できるように、最小限の依存関係で自己完結型にする必要があります。

独自の内部プロジェクトでこれを実行したい場合は、 Bundler を使用することをお勧めします。

40
gtd

[〜#〜] edit [〜#〜]

コメント者によると、これはもはや真実ではありません。履歴コンテキスト用の以前の情報が保持されます。

Gemfileと.gemspecでgemへの参照を複製すると、Bundlerで警告メッセージが表示されるようになったため、この答えはもはや当てはまらないように思われます。

古い情報

これ Yehuda Katzの記事は、私にとって同様の混乱を解消しました。開発でのみ使用する場合は、gitのものをgemfileに追加するのが最善ですが、そのバンドルは引き続きgemspecの依存関係/バージョン情報を使用します(私には魔法のようですが、Yehudaを信頼しています)。

12
tehgeekmeister

私もこの問題を理解しようとしていました。そして、次の解決策を思いつきました(gemを公開しているか、そのoauth2 gemを再配布する権利があるかどうかはわかりません)。

Oauth2 gemを必要とするgemでこれを実行します。

git submodule add [email protected]:lgs/oauth2.git lib/oauth2

デフォルトとは異なるブランチが必要な場合

cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"

Gemspecで、必要なバージョン行の上にこれを追加します

$:.Push File.expand_path('../lib/oauth2/lib', __FILE__)

また、oauth2 gemのランタイム依存関係をすべてgemspecに追加する必要があります。私はまだこれを回避する方法を見つけていません。

これは私がやったことであり、Gitはgit経由で必要なので、私にとってはうまくいきます。これがrubygemsで公開されたgemで機能するかどうかはわかりません。

6
kwbock