如何强制Bundler为mini-racer安装正确的libv8-node版本?
临时解决方案
该问题是Bundler 2.2版本系列的已知缺陷,会错误将musl(Alpine适用)的预编译gem匹配到glibc系的Debian系统上,以下是可直接使用的临时修复方案:
- 方法1:手动调整Gemfile.lock锁定的平台
先移除错误的musl平台,添加适配Debian的glibc平台,执行以下命令:
执行完成后重新运行bundle lock --remove-platform x86_64-linux-musl bundle lock --add-platform x86_64-linuxbundle update即可。 - 方法2:强制Bundler使用Ruby平台编译原生扩展
运行bundle命令时临时添加环境变量,强制跳过预编译包的平台匹配,直接在本地编译适配当前系统的版本:
如果需要长期对当前项目生效,可以在项目BUNDLE_FORCE_RUBY_PLATFORM=1 bundle update.bundle/config文件中添加以下配置:BUNDLE_FORCE_RUBY_PLATFORM: "true" - 方法3:Gemfile中显式指定libv8-node的适用平台
在Gemfile中修改libv8-node的声明,指定仅使用适配常规Linux发行版的版本:
修改后重新执行gem "libv8-node", platforms: [:mri, :x86_64_linux]bundle install即可生效。
内容的提问来源于stack exchange,提问作者pjmorse
相关产品推荐
相关产品推荐

