我曾经这样试过:
s.add_dependency 'gem', :path => '../gem'
喜欢在gemfile,
中添加gem,但它不起作用,并会导致此错误:
/Users/chenqh/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:81:in `parse': Illformed requirement
答案 0 :(得分:38)
开发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
更改!
答案 1 :(得分:16)
可能无法添加本地依赖项,因为其他用户将无法访问gem,因为它是本地依赖的,因此在发布后无用。而不是那样,在你自己的插件的gemspec中添加远程依赖。
步骤 -
1)在 vendor / plugins / my_plugin / 中打开您自己的插件的gemspec文件,并在关键字end之前添加:
s.add_dependency('will_paginate', '~> 3.0.pre2')
(在本例中我使用了will_paginate所需的my_plugin依赖关系)
2)现在进入你的rails应用程序并编辑Gemfile,添加:
gem 'my_plugin', path: 'vendor/plugins/my_plugin'
3)现在在rails app root中执行:
bundle install
安装了my_plugin(在这种情况下为will_paginate)的依赖关系。
答案 2 :(得分:1)
有时你想将一颗宝石嵌入另一颗宝石中,永远不要弄清楚原因。您可以引用另一个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
的依赖关系很好)。