0

依存関係を見つけるために Bundler の Gemfile に依存する gem があります (それらは github:enterprise でホストされています)。ライブラリとして使用できるようにし、バイナリも提供したいと考えています。

現在、バイナリがバンドルされた宝石をロードできる独自のディレクトリから実行している場合、バイナリとして正常に動作します。ただし、別のディレクトリから実行すると、依存関係が見つかりません (依存関係は独自の rvm gemset にあります)。Rubygems は依存関係を見つけることができないため、gem としてインストールできません (現在、依存関係は .gemspec にリストされており、Gemfile のどこにあるかが示されています)。

私は現在 を試してbundle packageいますが、すべての gem を vendor/cache ディレクトリに配置しました。私が知る限り、これは依存関係を .gemspec から削除し、代わりに Gemfile に入れる必要があることを意味します (Rubygems はベンダー提供されているため、依存関係をインストールすべきではないため)。これは、この gem を使用するすべてのコードが、これらの依存関係を認識し、それらを Gemspecs に追加する必要があることを意味しますが、私はそれで問題ありません。これは、.gemspec を変更してビルド時にベンダーの gem を含めるようにすればうまくいくと思います。また、バイナリがベンダーの gem をロード パスの先頭に設定するようにロード パスを管理できれば、それを使用するすべてのコードがライブラリはこれらをロード パスに追加しないため、インストールしたバージョンを取得します。

残念ながら、私はそれを行う方法がわかりません (すべての gemspecs を読んで、それらrequire_pathsを に追加するためにそれらを反映するまで$LOAD_PATH)、これがこの状況を処理する正しい方法であるかどうかはよくわかりません。

では、Gem を見つけるために Bundler が必要な場合に、lib として使用できる、または単にバイナリとして使用できる gem を作成するにはどうすればよいでしょうか?

4

1 に答える 1

0

独自の github エンタープライズ インスタンスでコードをホストしている場合は、カスタムの ruby​​gems サーバーを用意することをお勧めします。その後、内部の gem をそのサーバーに公開し、バンドラーにそこから取得させることができます。

これにより、現実の世界でバイナリを実行しているように、透過的なワークフローが作成されます!

于 2012-10-13T14:45:48.120 に答える