2

我想了解 Ruby on Rails 中的一个非常基本的概念。每次我创建一个新的 Rails 应用程序时,我都会创建一个gemset,然后将 gems 安装到该 gemset。有一次朋友问我为什么要这么做,我没能让他很清楚。

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

4

3 回答 3

4

Gemsets 对于制作独立的 Rails 应用程序很有用,其中其他 Rails 应用程序(具有相同的 ruby​​ 版本)彼此之间不共享 gems(因为它确实如此gem bundler

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

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

只是不要使用宝石

于 2016-06-18T11:28:04.300 回答
1

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

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

参考

于 2016-06-18T09:38:35.960 回答
0

这是一个非常有趣的问题。

您可以考虑 gemset 是 = 硬盘驱动器中的一种空间

我会告诉你完整的过程。

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

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

rvm --默认使用版本

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

因此,在这种情况下,如果您不使用 rvm,则可能会发生冲突,因此我们应该像下面这样创建新的 gemset。

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

所以目前我们指向 gemset demo

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

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

于 2016-06-18T13:20:28.423 回答