20

特定の依存関係を持つ gem を作成しましたが、それらのいくつかは、別のプロジェクトにバンドルするときに暗黙的に必要としないようにしたいと考えています。例として uuidtools gem があります。これは、それを使用するファイルでのみ必要とします。

gem.add_dependency("uuidtools",["=2.1.3"], :require => false)

:require => false は予想外なので、この構文は false ですが、これは多かれ少なかれ私がやりたいことを要約しています。誰かがこれについて私を助けることができますか?

4

2 に答える 2

16

エンジンの gemspec ファイルで指定された gem は、デフォルトで明示的に必須にする必要があります。公式ドキュメントから- Note that if you want to immediately require dependencies when the engine is required, you should require them before the engine's initialization. gem.add_dependency 'uuidtools', '2.1.3'あなたの場合、 gemspecファイルのようなものでうまくいくはずで、関連する場所に必要です。

于 2012-11-16T07:32:22.803 に答える
0

あなたが求めていることを達成する方法は、適切なgemspecに入れずに、バンドラー用のGemfileを追加することだと思います。次に、それをバンドラーがインストールした gem として追加できます。

これを行うには、Gemfile の先頭、またはソース宣言の後に単純な単語「gemspec」を追加します。これにより、gemspec 固有の gem がピックアップされます。しかし、これは基本的に良い設計ではありません。可能な場合は宝石やソースコードで避けるべきエントロピーに似ているようです。とは言っても、gem をインストールしてそれを必要とすることに害はないと思います。適切に名前空間を設定する必要があり、他のものに干渉することはありません。

あなたが引用した宝石を考えると。その宝石はもう必要ないかもしれません。Ruby 1.9 を使用していますか? もしそうなら、Ruby にはSecureRandomモジュールが組み込まれています。

require 'secure_random'

my_uuid = SecureRandom.uuid

それを使って真の UUID を生成することもできます! したがって、DBA は満足し、Postgres で UUID データ型を使用できます。(postgres を使用していますよね!笑)。また、IIRC、UUIDTools は標準に従って適切な UUID を生成しません。3番目のシーケンスは間違っていると思います。

于 2012-11-13T16:19:08.160 に答える