我试过这样:</p>
s.add_dependency 'gem', :path => '../gem'
就像在中添加 gemgemfile,
但它不起作用,并且会导致此错误:
/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'
就像在中添加 gemgemfile,
但它不起作用,并且会导致此错误:
/Users/chenqh/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:81:in `parse': Illformed requirement
在开发 gem1 和 gem2 2 个 gem 时,要求 gem1 本地依赖 gem2 非常方便。
您不能在您的 中执行此操作gemspec
,但是,您可以在您的 gem 中执行此操作Gemfile
!
# Gemfile
source "https://rubygems.org"
gem 'gem2', :path => '../gem2'
# Specify your gem's dependencies in gem1.gemspec
gemspec
然后在您的 gemspec 中,如果该 gem 已经发布,则像往常一样需要您的 gem:
# gem1.gemspec
spec.add_runtime_dependency "gem2"
只要确保您不会意外推动该Gemfile
更改!
可能无法添加本地依赖项,因为其他用户将无法访问 gem,因为它是本地依赖项,因此在发布后没有用。取而代之的是,在您自己的插件的 gemspec 中添加远程依赖项。
脚步 -
1)在vendor/plugins/my_plugin/中打开自己插件的gemspec文件,在关键字end前添加:
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 app root 做:
bundle install
并安装了 my_plugin(在这种情况下为 will_paginate)的依赖项。
有时您想将一颗宝石嵌入到另一颗宝石中,不管为什么。您可以从另一个中引用一个 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
编辑:这似乎只在本地工作。如果您尝试从 git repo 安装此 gemspec,它将不知道从哪里获取embedded_gemspec
(即使embedded_gemspec
's 的依赖关系很好)。