使用在不同Ruby版本上运行的Gem

时间:2014-03-22 09:44:10

标签: ruby gem gemfile

当我创建Gem并在Gemfile中指定ruby版本时会发生什么? 运行在不同Ruby版本上的应用程序是否能够使用我的Gem?
例如,使用像这样的Gemfile

ruby '2.1.1'
source 'https://rubygems.org'

在Ruby 1.9上运行的应用程序是否能够使用我的Gem?
谢谢

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,Bundler不会阻止你 我创建了两个包含两个宝石的文件夹。

  • ruby​​_new(在Ruby 2.0.0上运行的gem)
  • ruby​​_old(在Ruby 1.9.3上运行的gem)

ruby​​_old 的Gemfile看起来像这样

source 'https://rubygems.org'
ruby '1.9.3'

ruby​​_new 的Gemfile看起来像这样

source 'https://rubygems.org'
ruby '2.0.0'

gem "ruby_old", :path => "/complete/path/to/ruby_old"

换句话说, ruby​​_new 取决于 ruby​​_old
如果我进入 ruby​​_new 目录并运行捆绑安装,这就是我看到的

bundle install
Resolving dependencies...
Using rake (10.1.1)
Using bundler (1.3.5)
Using ruby_new (0.0.1) from source at .    
Using ruby_old (0.0.1) from source at /complete/path/to/ruby_old

Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

因此,我的问题的答案是肯定的,运行在较新版本的Ruby上的某个人可能会运行我用旧版本编写的宝石。

另一种方式也是可能的。如果 ruby​​_old 依赖于 ruby​​_new ,则在 ruby​​_old 上运行捆绑安装不会引发任何错误。