2

Railsアプリで、アプリで使用するいくつかのgem(「プライマリgem」と呼びます)があり、移植性のためにそれらをベンダー化したとします。

これらの「プライマリジェム」にも独自のジェムが必要であるとしましょう。これらを「セカンダリジェム」と呼びます。

environment.rbを設定するときは、次のように言う必要があります。

config.gem 'primary-gem'

直接使用している宝石のいずれか。

しかし、あなたも言う必要がありますか?。。

config.gem 'secondary-gem'

アプリでそのgemを明示的に使用していなくても?

vendor/gemsそれとも、アプリが取得するために、ディレクトリにgemを含めるだけで十分ですか?

4

2 に答える 2

5

デプロイ時に、railsは依存関係を認識しているため、gemをフリーズしたい場合は、実行できます。

rake gems:unpack:dependencies

それらをベンダーディレクトリにフリーズします。

ただし、実行時に依存関係をロードするのはgemsジョブであり、通常はgemがこれを実行するため、config.gem'primary'が機能するはずです。

于 2009-06-21T23:43:50.470 に答える
2

いいえ、しないか、少なくともすべきではありません。各GEM仕様には、独自の依存関係のリストを含める必要があります。プライマリgemがインストールされると、RubyGemsは各gem依存関係をカスケードに自動的にインストールします。

言い換えれば、AがC + Dを必要とするBを必要とする場合、あなたは書く必要があるだけです

config.gem 'A'

コマンドが

gem install A

が実行されると、RubyGemsはすべての依存関係を解決してインストールします。実行中のすべてのA依存関係を表示できます(Railsプロジェクトから)

rake gems

GEMの作成者は、仕様にGEMの依存関係を含めるのを忘れることがあります。この場合、environment.rbでそれらを指定して、アプリケーションにそれらを強制的にインストールさせる必要があります。もちろん、問題を解決できるように、GEMメンテナに連絡することもお勧めします。

于 2009-06-21T23:46:49.450 に答える