我想了解 Ruby on Rails 中的一个非常基本的概念。每次我创建一个新的 Rails 应用程序时,我都会创建一个gemset,然后将 gems 安装到该 gemset。有一次朋友问我为什么要这么做,我没能让他很清楚。
是因为如果我在同一个 Ruby 版本下有 2 个项目,并且两个项目都需要特定 gem 的不同版本吗?假设两者都使用默认 gemset,它不能将此 gem 的两个版本都安装到默认 gemset 中,因为它会导致冲突?如果我错了,请纠正我。
我想了解 Ruby on Rails 中的一个非常基本的概念。每次我创建一个新的 Rails 应用程序时,我都会创建一个gemset,然后将 gems 安装到该 gemset。有一次朋友问我为什么要这么做,我没能让他很清楚。
是因为如果我在同一个 Ruby 版本下有 2 个项目,并且两个项目都需要特定 gem 的不同版本吗?假设两者都使用默认 gemset,它不能将此 gem 的两个版本都安装到默认 gemset 中,因为它会导致冲突?如果我错了,请纠正我。
Gemsets 对于制作独立的 Rails 应用程序很有用,其中其他 Rails 应用程序(具有相同的 ruby 版本)彼此之间不共享 gems(因为它确实如此gem bundler
)
目前,使用 gemsets 是开销,因为:
gem bundler
很好地处理依赖关系gem pristine --all
Docker
都有自己的独立层只是不要使用宝石
通过 gemset,您的意思是 RVM Gemsets 对吗?RVM Gemset将 ruby 设置从系统和彼此分隔开来。例如,如果您有多个 Rails 项目,这将非常有用。每个项目可能需要不同版本的相同 gem。
但是,如果您使用的是 Bundler,则不需要使用 RVM Gemsets。预先添加任何命令bundle exec
将在项目的 Gemfile 的上下文中执行它。
参考
这是一个非常有趣的问题。
您可以考虑 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 版本之间的冲突。