回答
他们服务于不同的目的。 RVM创建一个沙箱来管理你的Ruby安装。作为其中的一部分,它也可以让你定义gemsets。
Bundler不管理你的Rubies,它与当前选定的Ruby一起工作。
所以,我觉得你应该考虑RVM作为开发环境配置管理器,并捆绑宝石经理的应用程序。
编辑:更多的想法 -
无论我们使用RVM与否,通常我们不得不来加载所有我们要使用手动应用程序的宝石,使用gem install blah
为每我们想用的宝石。
我最终通过手动管理我的宝石跨多个红宝石。安装完成后,我可以使用RVM创建gemset,但如果没有安装gemm,RVM将不会自动检索gem的特定版本,或者如果它被删除,则再次获取它。由于RVM更关心Ruby环境,因此它主要将宝石版本设置为gem
和我们。
捆扎机,在另一方面,确实有关RVM那些缺失的部分护理。当您为捆绑器创建Gemfile时,它将检索必要的宝石和指定的特定版本。因此,在另一台机器上安装Ruby应用程序的任务变得更加简单。将文件推送到另一台机器上,然后运行bundle install
,剩下的就完成了。
它与Rails很好地协作,并且是我的生产文件的合理解决方案。这比我为了在同一主机上运行Perl应用程序而必须处理Perl发行版要简单得多。
捆绑器代码中的管理依赖的工具 - 即,所有它需要的宝石。它将确保您在Gemfile中指定的所有宝石以及任何依赖项都安装在您的系统上。它并不关心你使用的是哪个版本的ruby,它只是在使用哪个解释器的情况下为你安装宝石。
RVM是运行多个红宝石的工具,从理论上讲,多gemsets为好。它根本不处理依赖关系 - 安装这些gem仍然取决于你。
我的经验(我是RVM的新手)是,除非你需要运行多个ruby,或者需要为不同的项目安装gem,否则它们之间会产生冲突,所以你不想打扰RVM 。即使你使用的是RVM,使用Bundler来管理gem依赖也是有意义的,这样你的Gemfile可以在你使用的任何代码库中进行跟踪。
即使您只运行一个版本的ruby,RVM也可以非常方便地检查您要推向世界的代码的依赖关系。开发依赖于宝石将是一个很好的例子,从发布之前的测试中受益。 – 2011-04-29 11:24:04
是的,这是一个很好的观点,我会牢记这一点。 – muffinista 2011-04-29 15:38:47
RVM更像是一个收容单元。虽然Bundler就像应用程序在生命周期中需要或使用的清单(依赖管理器)(除其他外)。
如果你在Rails的工作,你将无法逃脱捆扎机。但是我一直都在使用它,所以我知道我需要什么宝石,其他人以后也会参与这个项目。
RVM帮助我单独拿出我的红宝石,然后再进入红宝石/项目。这样我就没有一堆宝石和不同的版本。
不完全是最动态的答案,但希望它有一点帮助。
直接回答你的问题......
是什么捆扎机做RVM不 不是?
Bunlder将安装项目所需的所有宝石(使用捆绑器,并在Gemfile中指定所有需要的宝石)。 RVM不会这样做。
使用Gemfile中,你可以指定哪些宝石组(即:开发,测试)...
还有像这些是捆绑做,但RVM没有很多“小”事。一般来说,正如上面的好人所解释的那样,RVM与bundler有着不同的目标。有关管理ruby运行时的RVM,而bundler则是关于管理应用程序的相关gem。
- 1. 什么导致这个RVM/bundler差异?
- 2. 为什么RVM/Bundler集成会破坏RVM与终端的加载?
- 3. 为什么rvm install 2.0.0要求提供sudo密码?
- 4. 使用Bundler,RVM和RubyGems
- 5. RVM/Bundler/Capistrano的Python替换
- 6. Rubygems,Bundler和RVM混淆
- 7. error安装linecache19 gem bundler rvm
- 8. Silverlight提供什么?
- 9. ModeShape提供的JackRabbit不提供什么?
- 10. RVM PKG安装ree_dependencies提供有关autoreconf
- 11. 使用RVM和Bundler引用本地gem?
- 12. RVM,Ruby 1.9.2,Rails 3,Passenger 3.0.2(Bundler :: GemNotFound)
- 13. RVM Gemset - 生产中的Bundler&Capistrano
- 14. [[-s“$ HOME/.rvm/scripts/rvm”]] &&。 “$ HOME/.rvm/scripts/rvm”:它有什么作用?
- 15. BizSpark目前提供什么?
- 16. 什么是提供IOS
- 17. 什么平台提供SystemRandom?
- 18. 为什么bundler正在填充./libv8没有进入rvm文件夹
- 19. 当我使用Bundler时,为什么我应该关心RVM的Gemset功能?
- 20. 为什么Ruby bundler(w/whiskey_disk和RVM)抱怨安装的Gem不是> = 0?
- 21. 为什么bundler这样做?
- 22. 为什么Bundler是vendoring ruby?
- 23. 为什么RVM需要YAML?
- 24. Sqoop 2提供的Sqoop 1没有提供什么?
- 25. OpenID提供商 - 什么阻止恶意提供商?
- 26. 为什么$只提供'angular.mock.module'函数,$ q只提供'angular.mock.inject'函数?
- 27. OpenID提供者和OpenID WebRing SSO提供者有什么区别?
- 28. dfs.replication提供了复制因素,file.replication提供了什么
- 29. Bundler:为什么它要求“bundler/setup”读取gemspec?
- 30. ActionMailer提供的命令返回什么?
+1,没错,你无法在没有捆绑器的情况下启动你的Rails应用程序,所以我不确定你最近没有它。作为参考,您可以为每个ruby虚拟机添加捆绑器到您的全局gemset,然后每个虚拟机只安装一次。 – 2011-04-29 01:31:30
如果你更深入地解释Bundler的功能,以及如何补充或与RVM的gemsets作战,这将对我有所帮助。 – Phrogz 2011-04-29 01:50:24
@Phrogz,[基本原理](http://gembundler.com/rationale.html)页面是一个很好的概述。我认为它对于生产代码非常方便,特别是当它需要在多台机器上时。与传统上我不必管理所有宝石相比,Gemfile和bundler会一直这样做,只是它适用于Rails应用程序。我不在工作中使用Rails,但是生成实用程序脚本,所以这会很好地工作。 – 2011-04-29 07:14:08