2010-12-07 84 views
2

只是有点背景,我来自强大的C#/静态类型背景。所以我倾向于用.dlls来思考。所以如果我在一个项目中工作,我会参考我所需的dll,那就是这样。管理Rails的gem版本/依赖关系

是Ruby和Rails的新手我发现我可能做错了什么。例如,我使用我在本地创建的宝石在家里创建了一个Rails应用程序。使用不同的计算机(称为工作计算机)我试图在该项目上工作,只发现我正在使用不同版本的宝石。在执行捆绑安装后,我回到了一个工作项目。

我与这个问题是,我的宝石库变得'凌乱'。我结束了几个版本的相同的宝石。这是其他人的工作方式吗?当使用宝石(从需求),它会默认为最新版本?我感觉好像我没有正确地管理依赖关系,但正如我刚才提到的,我对Ruby的世界很陌生。

我应该只包括我的依赖项,然后每次有不同的/缺失的依赖项时执行一个bundle安装?如果我想升级到更新版本的gem,会发生什么?是否会更新bundle使用并继续使用的gemfile?

回答

8

是的,bundler是与Ruby on Rails合作的依靠。为什么?首先,因为它随附它(至少3.0版本)。其次,因为它很简单(与Java的Maven不同)。

功能的非详尽列表:

  • 它可以让你声明一个或多个宝石库从
  • ,以便将依赖由环境获取宝石(开发,生产...)
  • 指定你想要的版本

等等。欲了解更多信息,请查询http://gembundler.com/rationale.html

关于你的问题:是的,捆绑器将采取最新版本可用没有被指定。

此外,我会添加一个缺点:你不能指定一个宝石版本取决于操作系统。例如,nokogiri有一个Linux版本和一个胜利版本。

+0

不错的一个。我不知道你可以省略包文件中的版本。解决了版本差异0.0.1的构建中断问题 – Finglas 2010-12-07 18:35:35

1

需要gem中的模块时的默认行为是假设您希望最新版本的gem(如果您安装了多个gem)。之前你需要从宝石什么

gem "rails", "2.3.8" 

:您可以在这样一个特定的应用程序通过specifying which version you想改变这一点。这可确保此应用程序将使用指定版本的gem,即使安装了新版本。

当然,如果您不再需要它们,或者如果您始终使用捆绑器,那么您当然可以清除已安装的宝石的过时版本:只需擦除所有内容并再次运行捆绑器即可获取所需的安装宝石。

另一个有用的工具是Ruby Version Manager(RVM),除了处理不同版本的ruby之外,它还提供了一个名为gemsets的功能,它允许你隔开不同的应用程序或环境。这就是应用程序A可以拥有其所有必需宝石的单独gemset,而应用程序B拥有仅具有其所需宝石的另一个gemset。这将相当多地减少你的依赖关系中的混乱。