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

Qin*_*HEN 24 plugins dependencies ruby-on-rails rails-engines gemspecs

我试过这样的方式:

 s.add_dependency 'gem', :path => '../gem'
Run Code Online (Sandbox Code Playgroud)

喜欢添加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 
Run Code Online (Sandbox Code Playgroud)

Ash*_*aka 44

在开发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
Run Code Online (Sandbox Code Playgroud)

然后在你的gemspec中,如果宝石已经发布,就像你通常那样需要你的宝石:

# gem1.gemspec
spec.add_runtime_dependency "gem2"
Run Code Online (Sandbox Code Playgroud)

只要确保你不小心推动Gemfile改变!

  • 感谢msg和回答.我又采取了一些措施,需要添加"rake"作为依赖. (2认同)

My *_*God 17

可能无法添加本地依赖项,因为其他用户将无法访问gem,因为它是本地依赖的,因此在发布后无用.而不是那样,在你自己的插件的gemspec中添加远程依赖.

脚步 -

1)在vendor/plugins/my_plugin /中打开您自己的插件的gemspec文件,并在关键字end之前添加:

s.add_dependency('will_paginate', '~> 3.0.pre2')
Run Code Online (Sandbox Code Playgroud)

(在这个例子中我使用了will_paginate所需的my_plugin依赖项)

2)现在进入你的rails应用程序并编辑Gemfile,添加:

gem 'my_plugin', path: 'vendor/plugins/my_plugin'
Run Code Online (Sandbox Code Playgroud)

3)现在在rails app root中:

bundle install
Run Code Online (Sandbox Code Playgroud)

并且安装了my_plugin(在这种情况下为will_paginate)的依赖性.


Ian*_*Ian 5

有时您想将一颗宝石嵌入另一颗宝石,不管为什么。您可以从一个 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
Run Code Online (Sandbox Code Playgroud)

编辑:这似乎只在本地工作。如果您尝试从 git 存储库安装此 gemspec,它将不知道从哪里获取embedded_gemspec(即使 的embedded_gemspec依赖项很好)。