【问题标题】:Update just one gem with bundler使用 bundler 只更新一个 gem
【发布时间】:2012-07-01 01:34:33
【问题描述】:

我使用 bundler 来管理我的 rails 应用程序中的依赖项,并且我在 git 存储库中托管了一个 gem,如下所示:

gem 'gem-name', :git => 'path/to/my/gem.git'

为了更新这个 gem,我执行了bundle update,但它也更新了 Gemfile 中提到的所有 gem。那么只更新一个特定 gem 的命令是什么?

【问题讨论】:

    标签: ruby rubygems bundler


    【解决方案1】:

    Here你可以找到关于两者区别的很好的解释

    更新 gem 和依赖项:

    bundle update gem-name 
    

    只更新 gem:

    bundle update --source gem-name
    

    以及一些可能的副作用的好例子。

    更新

    正如@Tim 的回答所说,从 Bundler 1.14 开始,官方支持的方法是使用 bundle update --conservative gem-name

    【讨论】:

    • 小心,“更新 gem 和依赖项”意味着更新 rails 本身,如果它是一个依赖项并且您可能不希望这样做。 --source 只会更新指定为参数的 gem。所以在大多数情况下会更好。
    • 如何指定版本?
    • @OshanWisumperuma 在运行这些捆绑命令之前指定 Gemfile 或可能的 Gemfile.lock 中的版本
    【解决方案2】:

    如果您想将单个 gem 更新到特定版本:

    1. 在 Gemfile 中更改 gem 的版本
    2. bundle update
    > ruby -v
    ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
    > gem -v
    3.0.3
    > bundle -v
    Bundler version 2.1.4
    

    【讨论】:

      【解决方案3】:

      bundler update --source gem-name 将更新 Gemfile.lock 中的修订哈希,您可以将其与该 git 分支的最后一次提交哈希(默认为 master)进行比较。

      GIT remote: git@github.com:organization/repo-name.git revision: c810f4a29547b60ca8106b7a6b9a9532c392c954

      可以在github.com/organization/repo-name/commits/c810f4a2 找到(我使用速记 8 字符提交哈希作为 url)

      【讨论】:

        【解决方案4】:

        bundle update gem-name [--major|--patch|--minor]

        这也适用于依赖项。

        【讨论】:

        • 有没有办法将其更新到特定版本? --major--minor--patch 标志会自动将其升级到可能的最新版本。
        【解决方案5】:

        看来,对于较新版本的捆绑程序 (>= 1.14),它是:

        bundle update --conservative gem-name
        

        【讨论】:

        • 注意:这个命令会更新一个没有依赖的gem
        【解决方案6】:

        我自己使用bundle update --source 已经很长时间了,但在某些情况下它不起作用。幸运的是,有一个名为 bundler-patch 的 gem 旨在解决这个缺点。

        我还写了一篇简短的blog post,介绍了如何使用bundler-patch 以及为什么bundle update --source 不能始终如一地工作。此外,请务必查看 chrismo 的 a post,其中详细解释了 --source 选项的作用。

        【讨论】:

          【解决方案7】:

          执行此操作的方法是运行以下命令:

          bundle update --source gem-name
          

          【讨论】:

          • 这正是我所需要的,我有一个私有 gem,只需要在对私有 gem 进行一些更改后更新 gem 本身而不更新依赖项。
          【解决方案8】:

          您只需在命令行中指定 gem 名称:

          bundle update gem-name
          

          【讨论】:

          • 奇怪。这就是bundle help update 所说的。您使用的是哪个版本的捆绑程序?
          • bundle update gem-name 将更新 gem 和“它的任何依赖项”。
          猜你喜欢
          • 2014-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多