杂谈(其一)
Saika 博主

最近在几个仓库的使用上遇到了一点点小的问题,在解决问题的过程中,顿感 GitHub 的搜索功能之好用与强大,现来记一笔流水账。


本来放着不需要管的 New-API-FreeBSD 仓库突然 workflow 运行失败了,我一检查,有如下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/home/runner/work/new-api-freebsd/new-api-freebsd/new-api/web/node_modules/rollup/dist/native.js:38
throw new Error(
^

Error: Your current platform "freebsd" and architecture "x64" combination is not yet supported by the native Rollup build. Please use the WASM build "@rollup/wasm-node" instead.

The following platform-architecture combinations are supported:
android-arm
android-arm64
darwin-arm64
darwin-x64
linux-arm
linux-arm64
linux-arm64 (musl)
linux-riscv64
linux-x64
linux-x64 (musl)
win32-arm64
win32-ia32
win32-x64

If this is important to you, please consider supporting Rollup to make a native build for your platform and architecture available.

然后我便去查看了 New-API 的源仓库,发现其前端从 React 换成了 Vite 。而 Vite 在构建时需要使用 Rollup ,而 Rollup在构建时就有了如上报错。当然, Rollup 很贴心的给出了替代的解决方案——使用 @rollup/wasm-node

但是很不巧的是,我对 JavaScript 一窍不通,我根本不知道如何使用 @rollup/wasm-node 。即便我去其仓库看 README ,也完全摸不着头脑。

于是我直接在 GitHub 搜索报错信息,然后在 Nuxt 的 issue 里发现了解决办法——荷兰开发者 pi0 给出了可行的解决办法

You can use resolutions field in package.json (works with pnpm, yarn and recent npm, alternatively you can use overrides if not works) to pin to use wasm version of SWC:

1
2
3
4
5
6
"resolutions": {
"rollup": "npm:@rollup/wasm-node"
},
"overrides": {
"rollup": "npm:@rollup/wasm-node"
},

于是我尝试使用 jq 命令直接在前端部分的 package.json 中添加上述字段:

1
cp package.json package.json.bak && jq '.resolutions = {"rollup": "npm:@rollup/wasm-node"} | .overrides = {"rollup": "npm:@rollup/wasm-node"}' package.json.bak > package.json

然后重新构建并测试,完全正常。


由于 GitHub Copilot 的审查愈发严格,转 API 使用下封号速度越来越快,而 OpenAI 方的反逆向也愈演愈烈,不论是 Cloudflare 的五秒盾还是 OpenAI 的 Arkose Token 的加入,方便免费的使用 ChatGPT 变得愈加困难。

病急乱投医下我希望增加一些能够继续便利使用 GPT API 的渠道,然后我发现了deanxv/coze-discord-proxy。简单看下来(主要是看 Dockerfile 和 docker-compose.yaml ),在 Linux 上的使用,问题最大的应该是 Discord 和 Coze 机器人的账号,应用本体的部署是非常的简单易用的,等我真的要部署的时候再来看也不急,那么先折腾一下 FreeBSD 版本吧。

又由于其 Dockerfile 内的构建本体的步骤异常的简洁,于是我很快就写好了 workflow ,构建好了 FreeBSD 的版本(实际上如果作者愿意也可以直接使用 go build 的交叉编译啦,但是我不好意思打扰人家)。

然后就丢给论坛里的热佬去测试了。但是很快,就传来了在 Serv00 上因为权限不足不能访问 /tmp 目录,无法运行的消息:

1
2
[烫烫烫烫@s2]:<\~/domains/coze2api>\$ ./start.sh
[FATAL] 2024/03/25 - 09:46:37 | [open /tmp/data-gym-cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4.1d1adbda-d03c-46cc-b006-7353d3de07b3.tmp: permission denied]

我一看,第一想法是在源仓库内搜索 data-gym-cache 字段,看看具体的代码是怎么写的,此路径是否可以通过变量调整。结果当然是什么也没搜到。

虽然我不会 golang ,但是也用了不少 golang 写的应用,没见过猪跑也吃过猪肉是不是,我当然知道 golang 在构建前要先 go mod download ,即下载 go.mod 文件中标明的依赖项。

也就是说,/tmp/data-gym-cache 路径并非 deanxv/coze-discord-proxy 规定的,而是其依赖规定的。但是 go.mod 中又有那么多的依赖,我该怎么查找呢?

幸运的是,deanxv/coze-discord-proxy 的所有依赖项都是 GitHub 上的,所以我直接在 GitHub 搜索 data-gym-cache ,查看 code type ,看到了原本的依赖中,是用 DATA_GYM_CACHE_DIR 为变量名设置缓存目录的,而 /tmp/data-gym-cache 是其默认值。所以我告诉论坛热佬,设置这个变量为他有权限访问的路径,然后就运行成功了。

同理,我尝试在 Serv00 上使用 WarpGPT,也遇到了这个无权限访问 /tmp 路径的问题,根据其具体文件名称查询,是 eddycjy/fake-useragent 这个六年前就停止维护的库的问题,通过更改变量名 TMPDIR 的值可以更换其缓存目录,以达到在 Serv00 上正常使用的目的。


以上经历令我对 GitHub 的搜索功能有了进一步的认识,不得不说这也是一个解决问题的重要工具,因为其搜索范围涵盖 Code、Repositories、Issues、Pull requests、Discussions、Users、Commits、Packages、Wikis、Topics、Marketplace 等多个方面,可以使用任意一点已知信息获取到许许多多的相关信息,不仅仅是仓库功能的介绍,还包括问题的解决方法和代码的实现方法等等。在此我作一个暴论:用好 GitHub 的搜索引擎,能够极大地提高学习效率。

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
访问量