34

私はこのように試しました:</ p>

 s.add_dependency 'gem', :path => '../gem'

にgemを追加するようなものですgemfile,が、機能せず、次のエラーが発生します。

/Users/chenqh/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:81:in `parse': Illformed requirement 
4

3 に答える 3

23

gem はローカル依存であり、公開後は使用されないため、他のユーザーが gem にアクセスできないため、ローカル依存関係を追加することはおそらく不可能です。その代わりに、独自のプラグインの gemspec にリモート依存関係を追加します。

手順 -

1) vendor/plugins/my_plugin/にある独自のプラグインの gemspec ファイルを開き、キーワードの終わりの前に追加します。

s.add_dependency('will_paginate', '~> 3.0.pre2')

(この例では、my_plugin の必要な依存関係である will_paginate を使用しました)

2) 次に、Rails アプリに移動して Gemfile を編集し、以下を追加します。

gem 'my_plugin', path: 'vendor/plugins/my_plugin'

3) Rails アプリの root で以下を実行します。

bundle install

そして、my_plugin (この場合は will_paginate) の依存関係がインストールされます。

于 2012-12-03T12:52:15.737 に答える
3

ある宝石を別の宝石に埋め込みたい場合がありますが、その理由は気にしないでください。ある gempec を別の gempec から参照して、ローカルの gem を完全にカプセル化できます。

require "rubygems"

embedded_gemspec = Gem::Specification::load("path/to/internal.gemspec")

Gem::Specification.new do |spec|
  spec.name          = "gem_that_contains_another_gem"
  # spec.whatever,   = whole bunch of other info

  #                     our files               + other gem's files
  spec.files         = ['file1.rb', 'file2.rb'] + embedded_gemspec.files

  # our dependencies
  spec.add_dependency 'nokogiri'
  # other gem's dependencies
  embedded_gemspec.runtime_dependencies.each { |d| spec.add_dependency d }

end

編集:これはローカルでのみ機能するようです。この gemspec を、たとえば git リポジトリからインストールしようとすると、どこから取得すればよいかわかりませんembedded_gemspec(ただし、embedded_gemspecの依存関係は問題ありません)。

于 2016-11-16T20:13:36.223 に答える