【发布时间】:2015-05-21 21:04:28
【问题描述】:
请有人帮助我了解 ruby 应用程序如何管理应用程序的 gemfile 和 rvm gemsets。如果我当前正在使用 Gemset,并且安装了一堆 gem,并且我的 gemfile 中也有 gem,那么 Ruby 应用程序是使用 gemfile 中的 gem 还是应用程序的 gemset 中的 gem?
【问题讨论】:
请有人帮助我了解 ruby 应用程序如何管理应用程序的 gemfile 和 rvm gemsets。如果我当前正在使用 Gemset,并且安装了一堆 gem,并且我的 gemfile 中也有 gem,那么 Ruby 应用程序是使用 gemfile 中的 gem 还是应用程序的 gemset 中的 gem?
【问题讨论】:
要理解这一点,您需要退后一步,了解红宝石的一般工作原理。
让我们从没有 rvm 或 Gemfile 的系统开始。
当您通过“gem install”安装 gem 时,它会进入系统 gem 位置。
每当您编写 ruby 脚本并需要 gem 时,都会从那里获取它。
现在假设您需要为不同的项目使用不同版本的 gem。这就是 bundler 的用武之地。您创建一个 Gemfile,当您“捆绑安装”时,Gemfile 中列出的 gem 将被引入并在该项目的上下文中使用。您将需要执行“捆绑安装”以将它们带入,然后在“捆绑 exec ruby”之后与 gem 版本一起运行。您可以拥有多个 gem 版本并选择使用哪一个。如果您不通过捆绑程序,您将使用系统中的任何内容。
Rvm 现在。假设您想以有组织的方式更改“系统”gem 和 ruby 版本。这基本上就是 rvm gemset 的内容。通过路径间接的魔法,您可以为不同的 gem 集安装 gem 并假装它们是系统 gem。
所以 gemsets 和 gemfiles 是相互正交的。如果您使用 gem 文件,gems 将安装在 gem set 中,但如果您使用 bundler,您通常不会关心这一点。
通常你会想要使用 Gemfile。
【讨论】: