只是一点背景,我来自一个强大的C#/静态类型背景。因此,我倾向于用.dlls来思考。所以,如果我在一个项目中工作,我会参考我需要的dll,那就是那个。
对Ruby和Rails不熟悉我发现我可能做错了什么。例如,我使用本地的宝石在家创建一个Rails应用程序。使用不同的计算机(比如工作计算机)我试图在项目上工作,却发现我使用的是不同版本的宝石。执行捆绑安装后,我又回到了一个工作项目。
我遇到的问题是我的宝石库变得“凌乱”。我最终得到了同一个宝石的几个版本。这是其他人的工作方式吗?当使用gem(来自require)时,它会默认为最新版本吗?我觉得好像我没有正确地管理依赖关系,尽管我已经提到过我是Ruby的新世界。
我是否应该只包含我的依赖项,然后每次有不同/缺少的依赖项时执行bundle安装?如果我想升级到更新版本的gem,会发生什么?是否会更新bundle使用并继续使用它的gemfile?
答案 0 :(得分:8)
是的,bundler是使用Ruby on Rails处理依赖项的方法。为什么?首先,因为它随附(至少3.0版本)。第二,因为它很简单(与Java不同)。
非详尽的功能列表:
等等。有关详情,请查看此http://gembundler.com/rationale.html
关于您的问题:是的,如果没有指定,bundler将采用最新版本。
另外,我会添加一个不足之处:您无法根据操作系统指定gem版本。例如,nokogiri有一个linux版本和一个win版本。
答案 1 :(得分:0)
在gem中需要模块时的默认行为是假设您需要安装多个gem的最新版本。您可以在specifying which version you想要在特定应用程序中更改此内容,如下所示:
gem "rails", "2.3.8"
在你需要宝石的任何东西之前。这可确保此应用程序将使用指定版本的gem,即使安装了较新版本。
当您不再需要它们时,或者如果您始终如一地使用Bundler,您当然可以清除已安装宝石的过时版本:只需擦除所有内容并再次运行bundler即可安装所需的宝石。
另一个有用的工具是Ruby Version Manager(RVM),除了处理不同版本的ruby之外,它还提供了一个名为gemsets的功能,它允许您将不同的应用程序或环境隔离开来。也就是说,App A可以拥有其所有必需宝石的独立gemset,而App B则拥有另一个仅包含其所需宝石的gemset。这样可以减少依赖关系中的混乱。