使用 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 中只有 bundler
和 rake
。我让 bundler 从那里接管并管理其余的 gems 项目,就像你描述的那样。效果很好。
【讨论】:
这是否意味着您的每个项目都有一个独立的 gemset?我的意思是您在谈论您的“默认导轨设置”。在某些时候,此设置可能会演变为特定于项目的状态。到那时你有定制的宝石吗?您如何在开发机器上运行您的应用程序? 是的,我的所有非 Rails 项目都有独立的 gemset,还有一个用于 rails 的 gemset(只包含 bundler)。 Rails 项目的所有 gem 要求,我让 bundler 处理 - 例如bundle exec rails server
或 bundle exec rake
。因此,我的 Gemfile 会随着 rails 项目的发展而发展,但 rails
gemset 不会。以上是关于使用 Bundler 时,为啥要关心 RVM 的 Gemset 功能?的主要内容,如果未能解决你的问题,请参考以下文章
pg gem 安装错误 - lion osx、bundler 和 rvm
bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby [关闭]