【问题标题】:Updating Gemfile.lock without installing gems在不安装 gems 的情况下更新 Gemfile.lock
【发布时间】:2014-10-13 08:32:22
【问题描述】:

有没有办法强制更新 Gemfile.lock 而无需安装已更改的 gem?

【问题讨论】:

  • 你为什么要/必须这样做?
  • 也许有更好的方法,你到底想做什么?
  • 我正在部署到一个外部服务,该服务需要某些 gem 的某些特定版本,而这些 gem 不会安装在我的系统上。使服务正常工作的唯一方法是拥有一个具有所需版本的有效 Gemfile.lock。我可以进入并在 Gemfile.lock 中手动执行此操作,但我希望能够使用捆绑程序“正确”更新它。
  • 如果我没记错的话,Bundler 会通过安装 gem 来更新它们。您可以登录外部服务并在那里运行bundle update,也可以在本地设置与您的外部服务匹配的虚拟机。
  • @Stefan 恐怕这是不可能的。 Heroku 服务不容易虚拟化。它通过查看您推送到服务的 git 存储库来工作,它从那里开始引导。

标签: ruby bundler gemfile.lock


【解决方案1】:

运行bundle lock --update

我在 Chris Blunt 的博客文章中找到了答案:“Rails on Docker: Quickly Create or Update Your Gemfile.lock”

今天,我发现了一种节省下载 gems 时间的方法:bundler 的 lock 命令。

这个 gem 的命令解决了你的应用程序的依赖关系并写出适当的Gemfile.lock - 无需安装任何 gem 本身。

根据更新日志,这个命令是在Bundler 1.10.0.pre 中添加的,在提出这个问题大约八个月后发布。

【讨论】:

  • 更具体地说,我必须运行bundle lock --update
  • bundle lock without --update 将向Gemfile.lock 添加缺少的宝石,而不会进行可能有害的更新。
【解决方案2】:

代替

bundle install

执行以下操作:

bundle lock

这只会更新Gemfile.lock,但不会尝试在本地安装文件。如果您想为远程或部署平台准备Gemfile.lock,您必须使用

添加它
bundle lock --add-platform ...

https://bundler.io/v1.16/man/bundle-lock.1.html 的最新文档

【讨论】:

    【解决方案3】:

    使用以下命令强制执行您的特定要求:

    bundle inject rmagick "=1.7.1"
    

    【讨论】:

    • 我似乎无法让它工作。我不断收到“你指定了 rmagick(_some_version) 和 rmagick (injected_version)”
    • 在 Gemfile 中,将您的 (dev) 版本移动到开发组,并将 Heroku 留在主要部分(确保您部署到 Heroku -- 没有开发)。
    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多