Rails:为什么我们需要gemsets?

时间:2016-06-18 07:52:12

标签: ruby-on-rails gemset

我想了解Ruby on Rails中的一个非常基本的概念。每次我创建一个新的Rails应用程序时,我都会创建一个 gemset ,然后将gems安装到该gemset。一旦我的朋友问我为什么这样做,我就无法让他明白地理解。

是不是因为如果我在同一个Ruby版本下有 2个项目,并且两个都需要特定gem的不同版本?假设两者都使用默认gemset ,它无法将此gem的两个版本都安装到默认的gemset,因为它会导致冲突?如果我错了,请纠正我。

3 个答案:

答案 0 :(得分:2)

Gemsets对于制作独立的rails应用程序非常有用,其他rails应用程序(使用相同的ruby版本)不会在彼此之间共享宝石(因为它{{strong> 1}})

目前,使用gemsets是开销,因为:

  • gemsets降低下载宝石速度
  • gemsets增加硬盘空间
  • gem bundler很好地处理依赖关系
  • 如果您的宝石已损坏,可以使用gem bundler
  • 恢复它们
  • 开发和生产环境走向gem pristine --all,拥有自己的独立层

只是不要使用gemsets

答案 1 :(得分:1)

通过gemset你的意思是RVM Gemsets对吗?来自系统和彼此的RVM Gemset分隔红宝石设置。如果您有多个Rails项目,这非常有用。每个项目可能需要不同版本的相同gem。

但是,如果您使用的是Bundler,则不需要使用RVM Gemsets。在bundle exec之前添加任何命令将在项目的Gemfile上下文中执行。

<强>参考

答案 2 :(得分:0)

这是非常有趣的任务。

你可以认为gemset是=硬盘中的空间种类

我会告诉你完整的过程。

如果您有多个具有不同ruby版本的项目,那么我们需要使用rvm来避免冲突。 所以我们需要使用RVM(Ruby版本管理器)。 步骤进行:

1)安装rvm 2)安装rvm后我们需要使用ruby版本 例如:如果您的系统中安装了多个ruby,则选择其中一个

rvm - 默认使用版本

例如,您有2个项目使用ruby 1.9.X,其他项目使用2.0.X

所以在这种情况下,如果你没有使用rvm那么它可能会发生冲突,所以我们应该像下面一样创建新的gemset。

例: rvm gemset创建demo rvm gemset使用演示

所以目前我们正在指向gemset demo

现在我们已经安装了ruby,但是我们在这个gem中没有rails,所以我们必须在其中安装rails和其他gem。

所以结论是我们使用gemset来避免ruby版本之间的冲突。