JRuby执行bundle install时遇waitpid等错误求助
解决M2 Mac上JRuby执行bundle install的错误问题
问题概述
在M2 Mac(arm64架构)上使用JRuby 9.2.20.1/9.2.9.0/9.4.6.0等版本执行bundle install时,出现以下核心错误及警告:
- JDK IO权限警告
- RubyGems版本bug警告
NotImplementedError: waitpid unsupported or native support failed to load错误
分步解决方法
1. 修复JDK IO权限警告
将JVM参数添加到JRuby运行时中,可通过两种方式设置:
- 临时生效(单次命令):
JRUBY_OPTS="--add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED" bundle install - 永久生效(全局配置):
在你的shell配置文件(如~/.zshrc或~/.bashrc)中添加以下内容,执行source ~/.zshrc(对应你的shell)生效:export JRUBY_OPTS="--add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED"
2. 升级RubyGems版本
执行命令修复RubyGems的required_ruby_version bug:
gem update --system 3.2.3
若提示权限问题,优先检查RVM权限配置,必要时添加sudo执行。
3. 解决waitpid不支持的核心错误
这是M2 Mac arm64架构与JRuby native进程支持不兼容导致的,按以下步骤处理:
- 确保使用arm64版本的JDK:
安装OpenJDK 11或17的arm64版本(不要用x86架构的JDK),执行java -version验证输出中包含aarch64标识。 - 安装arm64版本的JRuby:
若当前JRuby是x86版本(通过Rosetta运行),先卸载后重新安装arm64版本:
执行rvm uninstall jruby-9.4.6.0 rvm install jruby-9.4.6.0 --binaryrvm list确认版本标注为aarch64。 - 禁用JRuby native进程支持(临时 workaround):
在执行bundle时添加--disable-native-process参数:JRUBY_OPTS="--disable-native-process --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED" bundle install - 升级到最新JRuby版本:
安装JRuby 9.4.x系列的最新版本(如9.4.8.0),官方对arm64架构的兼容性修复更完善:rvm install jruby-9.4.8.0 --binary rvm use jruby-9.4.8.0 bundle install
内容的提问来源于stack exchange,提问作者Rakshit Jain
相关产品推荐
相关产品推荐

