无法安装 jruby

问题描述

操作系统:macOS Catalina (10.15.7)

外壳:zsh

asdf:v.0.8.0

在我的.zshrc中:

export JDK_HOME=/Users/Ctreptow/.asdf/shims
export JAVA_HOME=${JDK_HOME}
export PATH=$PATH:${JAVA_HOME}
. $(brew --prefix asdf)/asdf.sh

提示

work/proj(master)> which java
/Users/Ctreptow/.asdf/shims/java
work/proj(master)> which ruby
/Users/Ctreptow/.asdf/shims/ruby
work/proj(master)> which jruby
jruby not found
work/proj(master)> which gem
/Users/Ctreptow/.asdf/shims/gem
work/proj(master)> which bundle
/Users/Ctreptow/.asdf/shims/bundle

当我今天尝试在 rbenv 项目中安装 gem 时,我意识到我配置了 asdfjruby。我决定改用asdf。我相信我已经删除rbenv,但可能我遗漏了一些挥之不去的东西。

我也做了一个brew uninstall ruby-build

jruby 项目中,我们的 Gemfile 指定:

ruby "2.5.7",engine: "jruby",engine_version: "9.2.13.0"

尝试安装 jruby 会产生:

work/proj(master)> asdf install ruby jruby-9.2.13.0
Downloading jruby-bin-9.2.13.0.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/73a8c241a162e644c87e864c3485c55adedeb82a6fd80fa3cb538fdacda7af58
Installing jruby-9.2.13.0...

BUILD Failed (Mac OS X 10.15.7 using ruby-build 20201005)

Inspect or clean up the working tree at /var/folders/w2/m3v3Grd53s191ys4wjc1tcnr0000gn/T/ruby-build.20201228141357.27332.TjSdh4
Results logged to /var/folders/w2/m3v3Grd53s191ys4wjc1tcnr0000gn/T/ruby-build.20201228141357.27332.log

Last 10 log lines:
Date: Mon,28 Dec 2020 17:11:23 GMT
ETag: "99df4eb89f88c7582bfe7c313daec7b4"
X-Cache: Hit from cloudfront
Via: 1.1 2cd732b3fedea7af49f60c3497dbaec3.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: ORD53-C3
X-Amz-Cf-Id: JksAVdI9wNtkTLb7k--bwYLHNrmbbhtI6FMFDQBm4h_OJi31nPbaLg==
Age: 10954

/var/folders/w2/m3v3Grd53s191ys4wjc1tcnr0000gn/T/ruby-build.20201228141357.27332.TjSdh4/jruby-9.2.13.0 /var/folders/w2/m3v3Grd53s191ys4wjc1tcnr0000gn/T/ruby-build.20201228141357.27332.TjSdh4 ~/code/work/proj
./ruby: line 446: /Users/Ctreptow/.asdf/shims/bin/java: No such file or directory

我怀疑错误来自于某种 rbenv 剩余部分,但我不确定是什么,因为我已经删除~/.rbenv 目录,并且还做了 brew uninstall rbenv作为我的 rbenv 中的清理 zshrc

错误指定了 /Users/Ctreptow/.asdf/shims/bin/java,暗示了一个名为 bin 的预期目录,但我的 shims 目录没有任何子目录。我也怀疑这是 rbenv 做事的方式遗留下来的。

如何让asdf安装jruby

更新:

我通过在 bin 中创建 ~/.asdf/shims/java 并将 java 符号链接bin/java解决这个问题:

ls -ltr ~/.asdf/shims/bin ==> java -> ../java

现在,当我尝试安装时,它已经过去了,我面临着新的错误

ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign to your local trusted store
ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign to your local trusted store
ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign to your local trusted store
ERROR:  Could not find a valid gem 'jruby-launcher' (>= 0),here is why:
          Unable to download data from https://rubygems.org/ - certificate verify Failed (https://rubygems.org/specs.4.8.gz)
ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign to your local trusted store
ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign to your local trusted store

解决方法

我通过首先安装 java 版本解决了这个问题:

asdf install java adoptopenjdk-8.0.275+1

然后通过执行以下操作确保为该项目正确设置:

asdf local java adoptopenjdk-8.0.275+1

这样做之后,我可以毫无问题地安装我需要的 jruby 版本。

,

即使您找到了解决问题的方法,当您提出问题时,我仍会尽力解释问题所在。

您最初的问题在于您的 JDK_HOMEJAVA_HOMEPATH

export JDK_HOME=/Users/Ctreptow/.asdf/shims
export JAVA_HOME=${JDK_HOME}
export PATH=$PATH:${JAVA_HOME}

您没有使用 ASDF java 插件来管理您的 JAVA_HOME,并且您的 PATH 应该已经由 ASDF 正确设置。

您的手动配置导致 jruby 期望 ${JAVA_HOME}/bin/java,因为 JAVA_HOME 应该看起来像(例如 Java 将如何安装在 macOS 上):

❯ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/adoptopenjdk-15.0.2+7/Contents/Home
❯ ls /Library/Java/JavaVirtualMachines/adoptopenjdk-15.0.2+7/Contents/Home
bin     conf    include jmods   legal   lib     man     release

您使用哪个 ASDF 插件来管理 Java 版本?它是默认的 https://github.com/halcyon/asdf-java 吗? (您可以使用 asdf plugin list --urls --refs 进行检查)

如果你使用它,你还需要包含 JAVA_HOME 脚本 . $(brew --prefix asdf)/plugins/java/set-java-home.zsh 在 asdf 脚本之后 . $(brew --prefix asdf)/asdf.sh 在您的 .zshrc

如果你使用它,你将有一个正确的 JAVA_HOME,同样在切换你想要的版本之后:

❯ asdf local java adoptopenjdk-8.0.275+1
❯ echo $JAVA_HOME
/Users/wessel/.asdf/installs/java/adoptopenjdk-8.0.275+1
❯ ls /Users/wessel/.asdf/installs/java/adoptopenjdk-8.0.275+1
ASSEMBLY_EXCEPTION bin                lib                sample
LICENSE            include            man                src.zip
THIRD_PARTY_README jre                release
❯ asdf local java zulu-15.29.15
❯ echo $JAVA_HOME
/Users/wessel/.asdf/installs/java/zulu-15.29.15/zulu-15.jdk/Contents/Home
❯ ls /Users/wessel/.asdf/installs/java/zulu-15.29.15/zulu-15.jdk/Contents/Home
DISCLAIMER   bin          demo         jmods        lib          readme.txt
Welcome.html conf         include      legal        man          release