私はこのように試しました:</ 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
私はこのように試しました:</ 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
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) の依存関係がインストールされます。
ある宝石を別の宝石に埋め込みたい場合がありますが、その理由は気にしないでください。ある 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
の依存関係は問題ありません)。