Bundler未安装多平台Gem:如何同时下载ARM与Linux版本?
如何让Bundler同时下载多平台Gem包
为什么默认只下载当前平台的包?
Bundler默认仅会为当前运行的系统平台(也就是你的arm64-darwin-23)下载对应架构的Gem包。Gemfile.lock里的PLATFORMS段只是记录依赖解析过程中涉及到的平台列表,并非强制Bundler下载所有平台包的指令,所以不会自动触发多平台包的下载。
强制下载多平台包的方法
- 使用
bundle package --all-platforms命令:这个命令会遍历Gemfile.lock中PLATFORMS下的所有平台,把对应版本的Gem包全部下载到vendor/cache目录里。 - 每次执行
bundle install时添加--all-platforms参数:运行bundle install --all-platforms,安装依赖时会同步下载所有平台对应的包,后续重复执行install也会保持这个行为。 - (可选)在Gemfile中明确指定Gem的多平台需求:如果只想针对特定Gem(比如nokogiri)指定多平台,可以在Gemfile里这样写:
gem 'nokogiri', platforms: [:darwin, :linux]
这一步主要是确保依赖解析时包含目标平台,配合上面的命令能更精准地获取对应包。
额外提示
如果之前已经执行过普通的bundle install,建议先运行bundle clean清理旧缓存,再执行上述命令,避免缓存残留导致的异常。
内容的提问来源于stack exchange,提问作者timpone
相关产品推荐
相关产品推荐

