是否可以仅在该人使用特定版本的ruby时添加gem依赖项?
背景:我正在研究使用Test :: Unit :: Autorunner之类的fork of a project。它们是ruby 1.8中标准库的一部分,但它不是1.9.1中标准库的一部分,而是在“test-unit”gem中。我想添加一个依赖关系,说如果有人使用ruby 1.9.1或更高版本,安装“test-unit”gem,但如果他们使用1.8或更早版本,则不需要安装任何东西。
答案 0 :(得分:2)
如果查看gemspec documentation for add_dependency,则无法选择ruby版本。也许您可以使用post_install_message属性告诉用户在使用ruby 1.9时安装gem。
答案 1 :(得分:1)
Gem不支持条件依赖(除了gem builder的环境 - 如上所述),而bundler也不是解决这个问题的可行选择 - 请参阅https://github.com/carlhuda/bundler/issues/1281
答案 2 :(得分:1)
我为一个项目做了这件事。诀窍是将脚本添加为扩展名,然后在安装时在用户的计算机上执行。
以下是我们的github的代码片段和链接:
首先,在gemspec中(我们实际上是使用Rakefile来生成它,但结果却相同)source
# This file *needs* to be named this, there are other files
# for other extension processors
s.extensions << 'ext/mkrf_conf.rb'
然后是mkrf_conf.rb source
中的相关行require 'rubygems/dependency_installer.rb'
inst = Gem::DependencyInstaller.new
inst.install "test-unit" if RUBY_VERSION > "1.9"
答案 3 :(得分:0)
任何方式......我希望我只使用Ruby来做到这一点....虽然你可以使用你的操作系统shell来做到这一点,在程序安装程序中使用它,只需执行(适用于基于Linux的操作系统) ):
$ruby --version
(你可以从ruby安装程序文件中执行该操作,就像:ruby --version
)
并根据输出提出一种可能性,如果它是1.9.1添加额外的行来执行:
$ sudo gem install gem_name
否则,就这样吧。
答案 4 :(得分:0)
在这里查看一些有点教程: http://wiki.github.com/rdp/ruby_tutorials_core/gem
它显示了如何安装不同版本的依赖项,具体取决于installee正在使用的ruby版本。
(简短的回答 - 它不是那么容易)
答案 5 :(得分:-1)
你做不到。你需要建立两个宝石,一个用
spec.required_ruby_version = '~> 1.8.6'
和一个
spec.required_ruby_version = '~> 1.9.1'
spec.add_dependency 'test-unit', '~> 2.0.5'
答案 6 :(得分:-1)
Gemspecs只是ruby文件,所以你可以在其中执行任何ruby代码,所以:
spec.add_dependency = 'test-unit', '>= 2.0' if RUBY_VERSION =~ '1.9'
编辑:规范仅在构建器计算机上运行。