如何使用冲突的gem版本管理多个Ruby应用程序?

时间:2014-08-05 15:54:15

标签: ruby-on-rails ruby gem rubygems sinatra

我有两个Sinatra应用程序,每个都使用不同的宝石集,其中一些版本具有冲突的版本,例如: app A使用Nokogiri 1.6.3,app B使用Nokogiri 1.5.5。

如何在同一台OSX计算机上管理这两个环境,并且能够在没有冲突的情况下切换它们?

我可以只使用Bundler,还是我还需要RVM?究竟怎么样?

2 个答案:

答案 0 :(得分:3)

Bundler处理系统上的多个Gem版本

Bundler可以很好地处理这个用例。您明确的gem依赖关系会进入 Gemfile ,然后bundle中的所有gem版本都会存储在 Gemfile.lock 文件中。

作为一般规则,您的宝石将安装在GEM_HOME中。可以同时安装多个版本的gem,require bundler/setup负责确保您的Ruby应用程序可以使用正确的版本(在Gemfile.lock中指定)。

但是,除非您使用binstubs,gemsets或<gem> _<version>_ [args]之类的特殊调用,否则您需要从命令行运行bundle exec <gem>才能使用捆绑包指定的正确版本。 / p>

答案 1 :(得分:1)

在系统上管理多个应用程序的最佳方法是使用像RMV这样的管理器(Ruby Version Manager)。

RVM具有gemset的概念,您可以使用它为不同的应用创建不同的宝石集。这是你的问题的解决方案。您需要为这两个应用程序创建不同的gemsets。像这样,你的宝石版本不会发生冲突。