如何在.gemspec文件中将本地gem的依赖项添加到rails插件/引擎

我试过这样的方式:

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

比如在gemfile,添加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,因为它是本地依赖的,因此在发布后无用。 而不是那样,在你自己的插件的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个gem时,gem1和gem2,要求gem1在本地依赖于gem2是非常方便的。

您不能在gemspec执行此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嵌入另一颗gem中,不要忘记原因。 您可以从另一个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 

编辑:这似乎只在本地工作。 如果你试图从git repo安装这个gemspec,它将不知道在哪里获得embedded_gemspec (即使embedded_gemspec的依赖项进入正常)。