我曾试图用这种方式:
s.add_dependency 'gem', :path => '../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
我曾试图用这种方式:
s.add_dependency 'gem', :path => '../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
很可能不能添加本地依赖性,因为其他用户将无法访问的宝石,因为它是依赖于本地,因此没有使用的发布后。 取而代之的是,在添加自己的插件的gemspec远程依赖性。
脚步 -
1) 供应商/插件/ 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应用程序的根做:
bundle install
而my_plugin(在这种情况下will_paginate)的依赖性安装。
在开发2颗宝石,GEM1和gem2,要求GEM1本地取决于gem2也很方便。
你不能做到这一点在你的gemspec
,但是,你可以在你的宝石的这样做Gemfile
!
# Gemfile
source "https://rubygems.org"
gem 'gem2', :path => '../gem2'
# Specify your gem's dependencies in gem1.gemspec
gemspec
然后在您的gemspec,需要你的宝石就像你通常会认为,如果创业板已经公布:
# gem1.gemspec
spec.add_runtime_dependency "gem2"
只要确保你不小心推送Gemfile
变化!
有时你要嵌入一个宝石到另一颗宝石,没关系为什么。 您可以从另一个引用一个gempec完全封装本地宝石。
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
编辑:这似乎只能在本地工作。 如果你尝试安装,比如说,从一个git回购该gemspec,也不会知道从哪里得到embedded_gemspec
(即使embedded_gemspec
的依赖进来就好了)。