我正在使用具有依赖项的Gem,其版本必须因安装了的时根据运行的Ruby版本而异。具体而言,当前版本的nio4r
gem需要Ruby版本> = 2.2.2,而需要nio4r
的async
gem理想情况下应该能够在任何Ruby版本> = 2.0的条件下运行。如何在Gem安装时指定Gem依赖版本
我试图把一些代码到gemspec文件变化的版本,但它似乎是,当创业板建,而不是当它是安装执行它。换句话说,nio4r版本根据用于构建gem的任何版本的Ruby来硬编码到gem中。这里是我在gemspec中尝试的代码(say
是一个OS X命令,用于说出一个字符串,并且对知道发生了什么以及什么时候非常有帮助;稍后我会将其删除)。
# Recent versions of nio4r require a Ruby version >= 2.2.2.
# If the version used is earlier, load an earlier version of nio4r.
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.2')
`say Installing latest version of nio4r`
spec.add_runtime_dependency "nio4r"
else
`say Installing nio4r version 1.2.1`
spec.add_runtime_dependency "nio4r", '1.2.1'
end
正如我所说的,这是创业板build
执行,而不是install
。我知道,我可以使用bundler
这种东西,并把规范放在Gemfile
,但据我所知,该文件将不会被使用,当宝石是gem install
'编辑。
我怎样才能获得依赖的宝石版本在宝石安装时变化?
我正在寻找一个自动化的解决方案,也就是说,不涉及任何这个宝石的用户干预。另外,由于安装了另一个gem,该gem将被安装,所以我不希望用户必须跟上对其依赖gem的更改,并且必须手动修改Gemfile。这可能会违反德米特法。
谢谢,但我要找的是自动化的解决方案,那就是,不涉及此宝石用户的任何干预。另外,由于安装了另一个gem,该gem将被安装,所以我不希望用户必须跟上对其依赖gem的更改,并且必须手动修改Gemfile。这可能会违反德米特法。我应该提到的是,我现在就要这样做。 –