【问题标题】:Rails: Why do we need gemsets?Rails:为什么我们需要 gemsets?
【发布时间】:2016-06-18 07:52:12
【问题描述】:

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

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

【问题讨论】:

  • Rails 应用程序不使用 Gemfile 中的 gem 吗?
  • 是的。我们可以在 gemfile 中指定应用程序所需的所有 gem。然后捆绑器将负责解决依赖关系和安装 gem。我的疑问是关于宝石组。为每个应用程序使用单独的 gemset 的实际好处是什么?
  • gemsets 在我们没有捆绑器时使用。现在它们没用了。

标签: ruby-on-rails gemset


【解决方案1】:

Gemsets 对于制作独立的 Rails 应用程序很有用,而其他 Rails 应用程序(具有相同的 ruby​​ 版本)彼此之间不共享 gems(就像 @987654321 @)

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

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

不要使用宝石组

【讨论】:

    【解决方案2】:

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

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

    参考文献

    【讨论】:

      【解决方案3】:

      这是一个非常有趣的任务。

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

      我会告诉你完整的过程。

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

      1) 安装 rvm 2)安装rvm后我们需要使用ruby版本 例如:如果您的系统中安装了多个 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​​ 版本之间的冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-09
        • 2014-06-18
        • 2017-02-26
        • 2011-04-03
        • 2017-07-27
        • 2020-09-21
        • 2020-03-09
        • 2018-12-24
        相关资源
        最近更新 更多