【发布时间】:2011-04-28 23:51:34
【问题描述】:
我不确定这两个工具之间有什么区别。似乎有很大的重叠,但我一直在使用 RVM 并面临一些不兼容的问题。
Bundler 做了哪些 RVM 不做的事情?
【问题讨论】:
标签: ruby ruby-on-rails-3 rvm bundler
我不确定这两个工具之间有什么区别。似乎有很大的重叠,但我一直在使用 RVM 并面临一些不兼容的问题。
Bundler 做了哪些 RVM 不做的事情?
【问题讨论】:
标签: ruby ruby-on-rails-3 rvm bundler
它们有不同的用途。 RVM 创建一个沙箱来管理您的 Ruby 安装。作为其中的一部分,它还允许您定义 gemset。
Bundler 不管理您的 Ruby,它适用于当前选择的 Ruby。
所以,我认为您应该将 RVM 视为开发环境的配置管理器,而将 Bundler 视为应用程序的 gem 管理器。
编辑:其他想法 -
无论我们是否使用 RVM,通常我们都必须使用 gem install blah 为我们想要使用的每个 gem 手动加载我们将用于应用程序的所有 gem。
我最终在多个红宝石上手动管理我的宝石。安装它们后,我可以使用 RVM 创建 gemset,但如果未安装,RVM 不会自动检索特定版本的 gem,或者如果它被删除,则重新获取它。因为 RVM 更关心您的 Ruby 环境,所以它主要将 gem 的版本控制留给 gem 和我们。
另一方面,Bundler 确实关心 RVM 中那些缺失的部分。当您为 bundler 创建 Gemfile 时,如果指定,它将检索必要的 gem 和特定版本。因此,在另一台机器上安装 Ruby 应用程序的任务变得更加简单。将文件推送到另一台机器,然后运行bundle install,它会完成剩下的工作。
它与 Rails 配合得很好,是我生产文件的明智解决方案。这将比我必须处理 Perl 发行版以便在同一主机上运行 Perl 应用程序要简单得多。
【讨论】:
RVM 更像是一个收容单元。虽然 Bundler 就像应用程序在其生命周期中需要或使用的内容(除其他外)的清单(依赖管理器)。
如果您在 Rails 中工作,您将无法逃离 Bundler。但我一直都在使用它,只是为了知道我需要什么宝石,以及后来加入该项目的其他人。
RVM 帮助我分离出我的红宝石,然后进一步分成红宝石/项目。这样我就没有一堆宝石和不同的版本。
不完全是最动人的答案,但希望它有点帮助。
【讨论】:
直接回答你的问题...
Bundler 做了什么,而 RVM 做了什么 不是吗?
Bunlder 将安装项目所需的所有 gem(使用 bundler,并在 Gemfile 中指定所有需要的 gem)。 RVM 不这样做。
使用 Gemfile,您可以指定哪些 gem 组(即:开发、测试)...
bundler 可以做很多这样的“小”事情,但 RVM 没有。一般来说,正如上面的好人所解释的那样,RVM 与 bundler 有一组不同的目标。 RVM 用于管理 ruby 运行时,而 bundler 用于管理应用程序的依赖 gem。
【讨论】:
Bundler 是一个用于管理代码中的依赖项的工具——即它需要的所有 gem。它将确保您在 Gemfile 中指定的所有 gem 以及任何依赖项都安装在您的系统上。它并不关心您使用的是哪个版本的 ruby,它只是在使用的任何解释器下为您安装 gem。
RVM 是一个运行多个 rubies 的工具,理论上也可以运行多个 gemset。它根本不为您处理依赖项——安装 gems 仍然取决于您。
我的经验(而且我是 RVM 新手)是,除非您需要运行多个 rubies,或者需要为相互冲突的不同项目安装 gem,否则您不想打扰 RVM。即使您使用的是 RVM,使用 Bundler 来管理 gem 依赖项也是有意义的,这样您的 Gemfile 就可以在您使用的任何代码存储库中进行跟踪。
【讨论】: