繁体   English   中英

使用Bundler的rvm gemsets

[英]rvm gemsets with Bundler

使用Rails:

如果Bundler检索到正确的gems(和依赖项)并将它们锁定在给定项目的Gemfile.lock中,那么对于同一个项目是否过度杀戮不使用gemset? 我被告知使用gemsets仍然是一个很好的做法,因为在你当前的PATH中只有2个版本的同一个gem会导致冲突。 这是正确的,还是只需要一个或另一个:Bundler或RVM?

如果你使用的是捆绑器,那么使用RVM的gemsets是多余的。

使用Bundler时的冲突主要有两个原因:

  1. 使用需要其他宝石但没有精确版本规格的宝石。
  2. 可执行冲突:你安装了rails v3和v4,那么在调用rails g migration或调用rake时我们去哪里?

如果您在Gemfile中更明确地指定gem版本,则可以解决第一个问题。

在使用Gemfile的项目中工作时,可以通过使用bundle exec为可执行调用添加前缀来解决第二个问题,它将在当前bundle的上下文中运行命令(例如bundle exec rake db:migrate )。

如果要在Gemfile的上下文之外指定gem版本(例如rails new fancy_app ),可以通过将其作为由下划线包围的第一个参数来指定任何gem的版本。

rake --version
rake _10.3.1_ --version
rails new rails_latest_app
rails _3.2.12_ new rails_3_app
rails _4.0.4_ new rails_4_app

RubyGems通过为任何gem的可执行文件创建版本感知包装器来为您处理所有这些。 只要运行cat `which gem_executable` (与gem_executable是像rakerailsforemanpry等),看一看。

Stephen Ball有一篇关于如何使用Bundler而不是RVM gemsets的博客文章,它更详细地探讨了重叠。

虽然RVM的gemsets不是必需的,但RVM提供了其他便利:

  • 自动将bundler binstub添加到PATH ,这样就可以避免输入bundle exec 请注意oh-my-zshbundler插件提供了相同的功能
  • 管理多个Ruby版本

ruby版本管理器rbenv提供类似的功能。

是的,宝石是矫枉过正的。 只需使用捆绑包。

RVM对于管理Ruby本身的版本仍然很有用 - 但不要将它用于gemsets。 只需使用bundler进行gem版本管理。

关于gem版本之间的冲突,如果你在每个命令之前使用bundle exec ,你应该没有问题 - 例如。 bundle exec rake db:migrate或者其他什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM