3

私の質問

次のようなディレクトリ構造があるとします。

app/
    core/
        bin/
            runner
        Gemfile
        ...
    Gemfile
    lib/

「コア」は、独自のGemfileとGemfile.lockを持つアプリケーションです。コアを変更したくありません。app / Gemfileはコアへのプラグインの一部であり、Gemfileもあります(core / Gemfileに追加される独自の依存関係を一覧表示します)。

app /core/およびapp/ディレクトリから「バンドルインストール」できます。

app / core /Gemfileとapp/Gemfileの両方からのすべてのRubygemが含まれるように、app/ディレクトリからcore/ bin / runnerを実行するにはどうすればよいですか?

バックグラウンド

CRubyを使用してLogstashのプラグインを作成しています。Logstashには独自のGemfileが含まれています。すべての依存関係がフェッチされると、パッケージの合計サイズは約40MBになります。

LogstashをHerokuで実行したいと思います。40MBのものをGitに入れないようにするために、Rubyビルドパック(https://github.com/inscitiv/heroku-buildpack-logstash)をフォークし、Logstashをダウンロードして解凍し、Gemfileを使用するように変更しました。

これは正常に機能しますが、Logstashによって提供されるGemfileでスタックしています。プラグインについては、プラグインが使用する新しい依存関係を追加したいと思います。これを実現するために、LogstashをフォークしてGemfileを変更したくはありません。

代わりに、Logstashを独自のディレクトリ(logstash /)に解凍してから、依存関係のGemfileを含むプラグインコードをその上にオーバーレイします。次に、「。」を指定してlogstashを実行するHeroku「worker」プロセスを実行します。プラグインディレクトリとして、両方のGemfileからすべてのgemにアクセスできます。

4

2 に答える 2

3

答えは、最上位のGemfileに子ディレクトリGemfilesを含める必要があるということです。

このようなもの(Redmine 2.0 Gemfileから)

# Load plugins' Gemfiles
Dir.glob File.expand_path("../plugins/*/Gemfile", __FILE__) do |file|
  puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
  instance_eval File.read(file)
end
于 2012-09-06T16:55:12.647 に答える
1

バンドラーがすべてのgem依存関係を正しく取得するためには、実際にはそれらすべてを1つのファイルにまとめる必要があります。プラグインをgemにして、デプロイルーチンに1つのgemを親Gemfileに追加してもらえますか?独自のgemは、全体に組み込まれる依存関係を一覧表示できます。

于 2012-07-18T13:44:31.537 に答える