【问题标题】:Can I stop Bundler from adding RUBY VERSION to Gemfile.lock我可以阻止 Bundler 将 RUBY VERSION 添加到 Gemfile.lock
【发布时间】:2016-03-30 18:05:18
【问题描述】:

每次我在命令行上运行任何 gem 命令时,Bundler 都会坚持触摸我的 Gemfile.lock 文件以添加此行:

RUBY VERSION
   ruby 2.2.2p95

我不想将它提交到我们的存储库,因为这意味着每个使用不同补丁级别的 Ruby 2.2.2 的开发人员都会与我发生提交战争。 (我已经放弃了与BUNDLED_WITH 行类似的问题。)但除非我确实提交该行,否则我无法部署,因为我们的部署通过 rake 任务运行并运行deploy 引导 Bundler 添加此块,然后部署过程说,“等等!您的工作树很脏!您可能正在部署不完整的更改!!!!1!”(嗯,不是字面意思,而是你明白了。)

我可以告诉 Bundler 将RUBY VERSION(最好是BUNDLED_WITH)从Gemfile.lock 中删除,这样我们就不必跳这种荒谬的舞蹈了吗?

how to prevent bundler from adding platform info to Gemfile.lock 似乎是同一个问题,但没有答案,natch。)

【问题讨论】:

    标签: ruby bundler


    【解决方案1】:

    我不这么认为,但也许没关系:

    从 2.1.0 开始,Ruby 不再为给定版本提供多个补丁级别版本。在How do version numbers work for MRI Ruby?上查看已接受的答案

    2.2.2p95 是唯一将发布的 2.2.2 补丁级别。 'p95' 仅仅意味着自 2.2.0 以来已经有 95 次提交。

    由于您的整个团队无论如何都将使用 2.2.2,因此将其留在您的 Gemfile.lock 中应该不会造成问题。 (无论如何,只要每个人都将 Bundler 更新到执行此操作的版本。否则在添加和删除 ruby​​ 版本时仍然会发生冲突。)

    【讨论】:

    • 然而事实证明,无论如何我们都会遇到提交战争,不是在 Ruby 版本上,而是在不同版本的 Bundler 添加和删除这个块上。 叹息
    • @pjmorse 我认为所有团队成员都拥有相同的 Bundler 版本是件好事。如果您需要锁定 gem,为什么不使用 Bundler?
    • @FranklinYu 好问题。我认为由于 Bundler 是开发人员工具,而不是应用程序的直接依赖项,因此锁定其版本不如锁定 gem 版本重要。 (此外,如果您的团队正在开发多个应用程序,您将需要在应用程序之间协调 Bundler 的锁定版本,这可能会很麻烦。您实际上是在让您的团队致力于同步 Bundler 更新。)
    • @pjmorse 我实际上并没有遇到多个应用程序的任何问题,因为旧的 Bundler 可以完全解析由新的 Bundler 生成的Gemfile.lock。它实际上不是锁定,而是通知其他团队成员有关 Bundler 的新版本。它不会强迫任何人升级,只是告诉他们“您没有在团队中使用最新版本”。如果没有成员或机器加入团队,它将保持该版本。
    • @pjmorse 事实上,我确实看到了someone else encounters problems,但Bundler 团队似乎并不后悔这个决定。通常,我的团队宁愿不与 gem 开发人员对抗,以使我们的生活更轻松。
    【解决方案2】:

    不,它不能被删除,至少在我写这篇文章时的当前 Bundler 版本中是这样。

    这个块被添加到Bundler::Definition的in the #to_lock method。它包含的唯一条件是if locked_ruby_version,而locked_ruby_version 是一种返回现有锁定文件(Gemfile.lock)或系统Ruby 中定义的版本的方法 - Bundler 非常努力地避免让locked_ruby_version 返回一个假值。

    【讨论】:

      【解决方案3】:

      如果您使用某种版本控制,例如 Git,您可以将 Gemfile.lock 添加到您的 .gitignore 文件中。

      这样,无论何时您提出新的更改,您都不会提出您的 Gemfile.lock。特别是因为其他开发人员不需要它 - 一旦他们运行 bundle,bundle 将在完成时创建一个新的 Gemfile.lock。

      【讨论】:

      • Gemfile.lock 的重点是根据 Gemfile 中指定的要求锁定确切的依赖版本。如果你想要一个可重现的环境,提交 Gemfile.lock 是非常必要的。
      • Gemfile.lock 排除在 git 存储库之外不是一种选择。实际上,我们确实希望我们团队中的所有开发人员都使用项目中所有 gem 的相同版本。
      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      相关资源
      最近更新 更多