ARM64架构下JRuby执行bundle install连接rubygems.org失败求助
ARM64架构JRuby下bundle install失败(snakeyaml-engine-2.7.jar缺失)的排查与解决
环境信息
- JRuby版本:
jruby-9.3.10.0 [arm64] - Bundler版本:
2.4.22
问题现象
- 执行
bundle install时触发意外错误,无法继续 - 尝试安装指定版本Bundler 2.2.17时,抛出
LoadError,提示缺失org/snakeyaml/snakeyaml-engine/2.7/snakeyaml-engine-2.7.jar - curl测试rubygems.org连接正常,Ruby net/http也能成功连接,但Bundler和RubyGems操作均因上述jar缺失报错
- 已尝试手动下载jar放置到对应路径、在JRuby仓库提交issue,问题仍未解决,怀疑与Java权限配置有关
排查与解决步骤
1. 确认JRuby依赖加载路径
JRuby会从自身lib目录或Java classpath加载依赖jar,手动放置jar后需校验路径正确性:
- 找到JRuby安装目录下的
lib文件夹(通常为$JRUBY_HOME/lib) - 检查是否存在
org/snakeyaml/snakeyaml-engine/2.7/层级目录,无则手动创建,将下载的snakeyaml-engine-2.7.jar放入其中 - 执行
echo $CLASSPATH查看系统classpath,确认jar所在路径已被包含,未包含则临时添加:export CLASSPATH=$CLASSPATH:/path/to/snakeyaml-engine-2.7.jar
2. 检查Java权限配置
若因权限问题无法读取jar文件,按以下操作处理:
- 查看jar文件及所在目录的权限:
ls -l /path/to/snakeyaml-engine-2.7.jar ls -ld /path/to/parent/directory - 确保运行JRuby的用户对该jar文件及目录拥有读权限,权限不足则修改:
chmod +r /path/to/snakeyaml-engine-2.7.jar chmod +rx /path/to/parent/directory - 若使用Java安全策略文件(
java.policy),检查是否有限制读取该jar的规则,必要时添加授权:grant { permission java.io.FilePermission "/path/to/snakeyaml-engine-2.7.jar", "read"; };
3. 重置Bundler环境
修复依赖后,重置Bundler配置确保加载新依赖:
# 清除Bundler缓存 bundle clean --force # 重新安装指定版本Bundler gem install bundler -v 2.2.17 # 重新执行bundle install bundle install
4. 验证JRuby依赖加载
通过JRuby命令行直接测试snakeyaml类加载,确认依赖是否生效:
jruby -e "require 'org.snakeyaml.engine.v2.api.Load'"
若未报错,说明依赖已成功加载,可再次尝试Bundler操作
内容的提问来源于stack exchange,提问作者Disco
相关产品推荐
相关产品推荐

