更新到 macOS Monterey 12.2 后 Heroku CLI 不工作

Heroku CLI not working after update to macOS Monterey 12.2

几天前,我将我的 macOS 从 Catalina 更新到 Monterey 12.2,但我无法再从命令行(使用 zsh)访问 Heroku。通常,从终端 运行ning heroku login 将在网络浏览器中打开 Heroku,登录后,我可以从 CLI 运行 后续 Heroku 命令。

这是我得到的输入和错误消息:

% heroku login
fatal error: runtime: bsdthread_register error

runtime stack:
runtime.throw(0x2d5619, 0x21)
    /usr/local/go/src/runtime/panic.go:566 +0x95 fp=0x7ff7bfeff6d0 sp=0x7ff7bfeff6b0
runtime.goenvs()
    /usr/local/go/src/runtime/os_darwin.go:88 +0xa0 fp=0x7ff7bfeff700 sp=0x7ff7bfeff6d0
runtime.schedinit()
    /usr/local/go/src/runtime/proc.go:450 +0x9c fp=0x7ff7bfeff740 sp=0x7ff7bfeff700
runtime.rt0_go(0x7ff7bfeff778, 0x2, 0x7ff7bfeff778, 0x0, 0x1000, 0x2, 0x7ff7bfeff948, 0x7ff7bfeff978, 0x0, 0x7ff7bfeff97e, ...)
    /usr/local/go/src/runtime/asm_amd64.s:145 +0x14f fp=0x7ff7bfeff748 sp=0x7ff7bfeff740

第一次在网上搜索这个错误,似乎我需要更新 Go,所以我下载了最新版本,并将其添加到我的路径中,如下所示:

% mkdir $HOME/go
% cd $HOME/go
% mkdir bin pkg src

并将以下行添加到我的 .zshrc 文件中:

export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin

(然后我从主目录 运行 source .zshrc)。
这似乎成功更新了 Go,因为 go version returns go1.17.6 darwin/amd64.

我再次 运行 heroku login 并得到完全相同的错误。任何 heroku 命令都会出现同样的错误。关于可能出错的任何线索?

我解决了这个问题,但我仍然不清楚为什么会出现该特定错误消息。这是我所做的:

我想我可能会在计算机上的 Heroku 错误日志中找到答案。我无法使用 heroku logs 命令,但我可以手动搜索。 Heroku 的网站说这些位于 ~/Library/Caches/heroku/error.log on macOS。但是这个目录不存在。 ~/Library/Caches/ 中没有 heroku 文件夹。我还有 Heroku - which heroku 正确返回路径 /usr/local/bin/heroku.

此时我想知道我在更新 OS 之前用来清除存储 space 的 CleanMyMac X 软件是否可能已经删除了 Heroku 文件夹以及旧的错误日志,并且这可能会阻止程序打开?

解决方案:我根据 Heroku 网站上的说明卸载了 Heroku CLI:

% brew uninstall heroku
% rm -rf ~/.local/share/heroku ~/Library/Caches/heroku

然后 re-installed 和 brew tap heroku/brew && brew install heroku

安装失败,自制软件提示我更新一些命令行工具:

% softwareupdate --all --install --force
% sudo rm -rf /Library/Developer/CommandLineTools
% sudo xcode-select --install

这些更新后,我再次尝试,heroku 安装成功。从那以后,我已经能够毫无问题地使用 CLI 使用 Heroku 命令。

根据 Heroku 网站上的 troubleshooting tips,我检查了 heroku 指向哪个二进制文件,结果发现它是 Homebrew 之外的旧安装:

$ which heroku
/usr/local/heroku/bin/heroku # should be: /usr/local/bin/heroku

我删除了这个安装,然后重新启动了通过 Homebrew 安装的 heroku 终端:

$ rm -rf /usr/local/heroku

对我来说,heroku CLI 指向了错误的地方,所以简单地 运行 brew link --overwrite heroku 就解决了。我会遵循 Heroku 写的关于 Brew 问题的recommendation