【问题标题】:Pretend other platform for `bundle install`为 `bundle install` 假装其他平台
【发布时间】:2023-04-09 08:59:02
【问题描述】:

我正在 Windows 下使用 bundler 进行开发,我想知道如何为我的生产环境创建 Gemfile.lock

似乎缺少的是其他平台的宝石。运行bundle install

group :production do  
  gem 'mysql2'
end

在 Windows 上创建 Gemfile.lock

mysql2 (0.3.18-x86-mingw32)

当部署到 Linux 环境时,这显然是不正确的,我需要 Gemfile.lock 来包含 Linux 的正确结果。我可以在 Linux 上运行 bundle install 并了解这一点

mysql2 (0.3.18)

是适用于 Linux 的正确 gem。然后我手动更新存储库中的Gemfile.lock 以包含两者:

mysql2 (0.3.18)
mysql2 (0.3.18-x86-mingw32)

这在两个平台下都可以正常工作,但看起来很杂。

我如何告诉 bundle 为本地平台以外的另一个平台解析 Gemfile.lock?我想我需要像bundle install --all-platforms 这样的东西。我错过了什么?

【问题讨论】:

  • 问题有点不同,因为我不在乎为不同的平台指定不同的 gem,而是为不同的 Gemfile.lock 规范指定。特别是我认为这违反了Gemfile 应该是什么,如果我真的不在乎,我将不得不在Gemfile 中将mysql 固定为0.3.18。

标签: ruby-on-rails ruby gem bundler


【解决方案1】:

这似乎是捆绑器中的known shortcoming,解决方法似乎是您需要使用的run bundle pack on every platform

【讨论】:

  • 链接中的讨论有点关于打包(对于打包,实际上有一个使用--all-platforms 的解决方案)。分辨率怎么样?我可以在不安装的情况下运行捆绑程序来解决平台的依赖关系吗?
  • 一般来说,部署是在与开发类似的平台上完成的,所以我只关注我链接到的问题以寻求解决方案。
【解决方案2】:

运行以下命令将解决您的问题。

bundle lock --add-platform x86_64-linux
bundle install
git add . ; git commit -m fix

参考

  1. https://www.moncefbelyamani.com/understanding-the-gemfile-lock-file/#platforms

  2. https://bundler.io/man/gemfile.5.html#PLATFORMS

  3. https://github.com/rubygems/rubygems/issues/4269#issuecomment-758564690

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2012-02-09
    • 2023-04-05
    • 2017-09-04
    相关资源
    最近更新 更多