如何控制依赖宝石版本?

时间:2016-01-15 13:32:02

标签: ruby-on-rails ruby rubygems

我创建了一个新的AWS ubuntu服务器,并尝试在其上安装Unicorn(使用salt-stack和手动)但它失败并出现以下错误。

[INFO    ] Running state [unicorn] at time 12:18:59.787564
[INFO    ] Executing state gem.installed for unicorn
[INFO    ] Executing command 'gem list unicorn' in directory '/home/ubuntu'
[INFO    ] Executing command '/usr/local/rbenv/bin/rbenv rehash ' in directory '/home/ubuntu'
[INFO    ] Executing command 'gem install unicorn --version 4.8.2 --no-rdoc --no-ri' in directory '/home/ubuntu'
[ERROR   ] Command 'gem install unicorn --version 4.8.2 --no-rdoc --no-ri' failed with return code: 1
[ERROR   ] stderr: ERROR:  Error installing unicorn:
    rack requires Ruby version >= 2.2.2.
[ERROR   ] retcode: 1
[ERROR   ] Could not install gem.

几个月前我创建了一个类似的服务器,安装工作正常。它失败了,因为在安装unicorn gem(4.8.2)时它安装了rack gem(1.6.4)作为独角兽依赖。机架1.6.4依赖于ruby 2.2.2,因此安装失败。

我手动安装rack version 1.6.2,然后尝试安装unicorn 4.8.2并且它有效。

现在问题是如何避免这种不一致,我能想到的一个解决方案是手动安装所有依赖项宝石,但这需要很多努力。有没有办法锁定gem版本以及gem依赖版本?

1 个答案:

答案 0 :(得分:1)

你使用捆绑包吗?如果不看它http://bundler.io/

有了它,你可以在Gemfile中定义gems的版本。当您运行bundle install时,将生成一个名为Gemfile.lock的文件,其中所有gem版本及其依赖项都已锁定。