【问题标题】:Managing gem versions/dependencies for Rails管理 Rails 的 gem 版本/依赖项
【发布时间】:2023-03-31 00:04:01
【问题描述】:

只是一点背景,我来自强大的 C#/静态类型背景。因此,我倾向于考虑 .dll。因此,如果我在一个项目中工作,我会引用我所需的 dll,就是这样。

作为 Ruby 和 Rails 的新手,我发现我可能做错了什么。例如,我使用本地的 gem 在家里创建了一个 Rails 应用程序。使用不同的计算机(比如工作计算机)我尝试在项目上工作,却发现我正在使用不同版本的 gems。执行捆绑安装后,我回到了一个工作项目。

我遇到的问题是我的 gem 库变得“乱七八糟”。我最终得到了同一个 gem 的多个版本。这是其他人的工作方式吗?使用 gem(来自要求)时,它会默认为最新版本吗?我感觉好像我没有正确管理依赖项,但正如我所提到的,我是 Ruby 世界的新手。

我是否应该只包含我的依赖项,然后每次我有不同/缺少的依赖项时执行捆绑安装?如果我想升级到较新版本的 gem,会发生什么?会不会是更新 bundle 使用的 gemfile 并继续使用它的情况?

【问题讨论】:

    标签: ruby-on-rails ruby rubygems dependencies bundle


    【解决方案1】:

    是的,bundler 是使用 Ruby on Rails 处理依赖项的方法。为什么 ?首先,因为它是附带的(至少对于 3.0 版)。其次,因为它非常简单(不像使用 Java 的 maven)。

    非详尽的功能列表:

    • 它允许您声明一个或多个 gem 存储库以从中获取 gem
    • 按环境(开发、生产...)对依赖项进行分组
    • 指定您想要的版本

    等等。有关更多信息,请查看此http://gembundler.com/rationale.html

    关于您的问题:是的,捆绑器将采用最新可用的版本,但未指定。

    另外,我要补充一个缺点:您不能根据操作系统指定 gem 版本。例如,nokogiri 有一个 linux 版本和一个 win 版本。

    【讨论】:

    • 不错的一个。我不知道您可以省略捆绑文件中的版本。解决了我的版本差异为 0.0.1 的构建中断问题
    【解决方案2】:

    在 gem 中需要一个模块时,默认行为是假设您需要最新版本的 gem(如果您安装了多个 gem)。您可以在特定应用程序中通过 specifying which version you 更改此设置,如下所示:

    gem "rails", "2.3.8"
    

    在您需要宝石的任何东西之前。这可确保此应用程序将使用指定版本的 gem,即使安装了较新的版本。

    您当然可以在不再需要它们时清除已安装 gem 的过时版本,或者如果您一直使用 bundler:只需擦除所有内容并再次运行 bundler 即可安装所需的 gem。

    另一个有用的工具是Ruby Version Manager (RVM),除了处理不同版本的 ruby​​ 之外,它还提供了一个名为 gemsets 的功能,允许您将不同的应用程序或环境相互隔离。也就是说,App A 可以拥有其单独的 gemset 及其所有必需的 gem,而 App B 有另一个 gemset,其中只有所需的 gem。这将大大减少依赖项中的混乱情况。

    【讨论】:

    • 第一个链接坏了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2015-10-17
    • 2018-10-12
    • 1970-01-01
    • 2013-01-24
    • 2018-04-01
    相关资源
    最近更新 更多