使用 Bundler 时,为啥要关心 RVM 的 Gemset 功能?

Posted

技术标签:

【中文标题】使用 Bundler 时,为啥要关心 RVM 的 Gemset 功能?【英文标题】:Why should I care about RVM's Gemset feature when I use Bundler?使用 Bundler 时,为什么要关心 RVM 的 Gemset 功能? 【发布时间】:2011-06-09 00:27:06 【问题描述】:

我只是不明白。我想,Bundler 是为了解决 gem 之间的版本冲突而开发的。所以我只需要require "bundler/setup" 一切都很好,知道 Bundler 将加载我所有 gem 及其依赖项的正确版本。现在,RVM 非常适合管理多个 Ruby,我知道,但我为什么要关心 Gemset 功能呢?我在这里想念什么吗?它能让我的开发更容易吗?也许,你们中的一些人可以给我一些关于开发和生产的完美 RVM + Bundler 工作流程的提示。

我也不知道 RVM 什么时候开始切换到另一个 Ruby。我知道我的项目中可以有一个.rvmrc 文件,但是我是否必须将cd 到这个目录才能进行切换?

此外,我通常使用 Passenger 进行开发,因为感谢 Passenger.prefpane,在 Mac OS 中的集成非常棒。我仍然可以使用 RVM 做到这一点,还是有更好的方法来做到这一点? Passenger 是否识别 .rvmrc 文件并切换到正确的 Gemset?

【问题讨论】:

是的,rvm 将 cd 重新定义为一个 shell 函数,它在更改目录时检查 .rvmrc 文件。 【参考方案1】:

我在使用 Bundler 时为什么要关心 RVM 的 Gemset 功能?

你不应该。

好吧,如果你,你可以关心,当然,所以我最好说“你不需要”。

我刚刚听了一个podcast interview with one of the Bundler core team members 说,自从他开始使用 Bundler 后,他就停止使用 Gemset,因为它们是多余的。

Here's a blog post that discusses the same issue, with some examples.

【讨论】:

然而,目前 RVM 和 bundler 不能很好地协同工作。请参阅beginrescueend.com/integration/bundler 了解最新详情。现在我使用 gemsets 来避免在共享 gems 的不同项目上切换 ruby​​ 版本时出现分段错误。【参考方案2】:

如果您预计必须更改捆绑程序版本,则绝对应该使用 gemset。您可以使用 gemset 来管理对 Rails 应用程序(wirble 等)无关紧要的 gem。

【讨论】:

【参考方案3】:

当我处理遗留代码或分叉其他非 Rails ruby​​ 项目时,无论出于何种原因都没有采用 bundle 路线,gemset 是一件很棒的事情。在开发 gem 时,我还发现 gemset 非常宝贵。很高兴有多个测试环境可以在新构建的 gem 之间切换和测试。

据我所知,乘客并未阅读.rvmrc。据我所知,您不能在不同的红宝石下在乘客中运行不同的项目。我的默认 Rails 设置在全局 gemset 中只有 bundlerrake。我让 bundler 从那里接管并管理其余的 gems 项目,就像你描述的那样。效果很好。

【讨论】:

这是否意味着您的每个项目都有一个独立的 gemset?我的意思是您在谈论您的“默认导轨设置”。在某些时候,此设置可能会演变为特定于项目的状态。到那时你有定制的宝石吗?您如何在开发机器上运行您的应用程序? 是的,我的所有非 Rails 项目都有独立的 gemset,还有一个用于 rails 的 gemset(只包含 bundler)。 Rails 项目的所有 gem 要求,我让 bundler 处理 - 例如 bundle exec rails serverbundle exec rake。因此,我的 Gemfile 会随着 rails 项目的发展而发展,但 rails gemset 不会。

以上是关于使用 Bundler 时,为啥要关心 RVM 的 Gemset 功能?的主要内容,如果未能解决你的问题,请参考以下文章

pg gem 安装错误 - lion osx、bundler 和 rvm

Rubygems、Bundler 和 RVM 之间的关系

bundler 在哪里存储宝石?

bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby​​ [关闭]

安装 nokogiri (1.10.10) 时出错,Bundler 无法继续

通过 Bundler 安装 mysql2 gem 时出错