Git – 永夜 https://www.shuijingwanwq.com 没有不值得去解决的问题,也没有不值得去学习的技术! Mon, 08 Jun 2026 12:02:44 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.0 从零到一:在 Trae CN + Docker 中搭建 Go + Gin 开发环境 https://www.shuijingwanwq.com/2026/06/08/16544/ https://www.shuijingwanwq.com/2026/06/08/16544/#respond Mon, 08 Jun 2026 12:02:40 +0000 https://www.shuijingwanwq.com/?p=16544 浏览量: 20

写在前面

最近我在 Ubuntu 26.04 上尝试使用 Trae CN 编辑器,配合 Docker 容器来开发一个 Go + Gin 的项目(go-gin-learning)。整个过程踩了一些坑,但也跑通了一套还算顺手的工作流。这篇文章就是一份完整的记录,希望能帮到遇到类似问题的朋友。

如果你已经看过我之前的博客(比如《在 Ubuntu 26.04 中基于 Docker Compose + Go 1.26.4 完成基础环境的搭建》),那这篇可以算是“下一篇”——从代码提交到容器运行,全部串起来。


一、宿主机上的准备工作

1.1 安装 Git 并配置用户信息

首先确保宿主机有 Git,然后设置全局用户名和邮箱(这些信息会写在每次 commit 里):

git config --global user.name "shuijingwan"
git config --global user.email "shuijingwanwq@163.com"

验证一下:

git config --global user.name
git config --global user.email

1.2 配置 GitHub 认证(使用 Token)

从 2021 年起 GitHub 不再支持密码认证,需要生成 Personal Access Token。

  • 登录 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
  • 点击 Generate new token (classic)
  • 勾选 repo 权限,生成后复制 token(只显示一次)
  • 在宿主机终端执行:
git push origin main

当提示输入用户名时输入你的 GitHub 用户名,密码处粘贴刚才复制的 token。成功后 Git 会记住认证信息(如果配置了 credential helper)。

1.3 安装 Go(宿主机)

为了让 Trae CN 中的代码补全、语法跳转正常工作,需要在宿主机安装 Go。我选择了使用 APT 安装,简单省事:

sudo apt update
sudo apt install golang-go -y
go version

输出:go version go1.26.0 linux/amd64

其实系统“软件”中心里也有 Go 的 Snap 版本(见截图),但 APT 更轻量,且与容器内的 Go 版本兼容。

软件中心中 Go 的可用版本
软件中心中 Go 的可用版本

1.4 在 Trae CN 中安装 Go 扩展

打开 Trae CN 的扩展商店,搜索 Go,找到官方扩展(发布者为 golang)并安装。

扩展商店中的 Go 扩展
扩展商店中的 Go 扩展

安装完成后,按 Ctrl+Shift+P,输入 Go: Install/Update Tools,在弹出的列表中勾选 goplsdlvstaticcheck 等常用工具,点击确定。

选择要安装的 Go 工具
选择要安装的 Go 工具

等待安装完成,然后重新加载窗口。

至此,宿主机上的代码编辑环境已经就绪。

在 main.go 中输入 fmt. 应该能看到智能提示。
main.go 中输入 fmt. 应该能看到智能提示。

二、容器中的开发环境

2.1 让容器复用宿主机的 Git 配置

我们希望在容器内执行 git commit 时也能使用宿主机的用户名和邮箱。修改 docker-compose.yml,挂载 ~/.gitconfig

volumes:
  - ./:/code
  - ~/.gitconfig:/root/.gitconfig:ro

重启容器后,进入容器验证:

docker exec -it go-gin-learning sh
git config --global user.name   # 应显示 shuijingwan
git config --global user.email  # 应显示 shuijingwanwq@163.com

2.2 解决 Go 模块下载慢的问题

一开始容器内执行 go mod tidy 总是失败或超时,因为默认代理 goproxy.io 不稳定,而且每次容器重建都会清空缓存。

解决方案有两个:

  • 设置更稳定的代理:go env -w GOPROXY=https://goproxy.cn,direct
  • 持久化模块缓存:将宿主机的目录挂载到容器的 /go/pkg/mod

我采用了后者,在 docker-compose.yml 中添加:

volumes:
  - ~/go/pkg-mod-go-gin-learning:/go/pkg/mod

这样容器内的依赖包会存放在宿主机的一个专用目录中,即使容器删除也不会丢失。再次执行 go mod tidy 时,所有 go: downloading 都成功了。

2.3 运行 Gin 服务

在容器内执行:

go run main.go

看到如下输出说明服务启动成功:

[GIN-debug] Listening and serving HTTP on 0.0.0.0:8080

用浏览器访问 http://localhost:8080/albums,返回 JSON 数据,状态码 200。

浏览器中的请求响应正常
浏览器中的请求响应正常

这时在 Trae CN 的 Docker 扩展面板中,可以右键容器选择 Attach Shell,方便地打开容器终端。

Docker 扩展面板的容器操作菜单
Docker 扩展面板的容器操作菜单

三、总结与标准化展望

当前工作流小结

  1. 宿主机:负责 Git 操作、代码编辑、Go 语言服务器(gopls)。
  2. 容器:负责运行 go rungo test,依赖模块通过挂载的缓存目录持久化。
  3. Trae CN:通过 Go 扩展提供智能补全,通过 Docker 扩展附加到容器终端,做到“编辑在宿主机,运行在容器”。

虽然 Dev Containers 在 Trae CN 上暂时不可用,但通过“宿主机 Go + 容器运行 + 缓存持久化”的组合,我们依然获得了一个高效、可靠的开发环境。
(顺便说一句,.devcontainer/devcontainer.json 我并没有删除,因为团队里其他使用 VS Code 的成员可能还需要它。)

未来可以标准化的点

  • 使用 Makefile 封装常用命令:比如 make runmake testmake tidy,减少手动输入。
  • 集成 Air 热加载:在容器内安装 air,保存文件后自动重启服务,提升开发效率。
  • 将环境配置写成脚本:把 docker-compose.yml 的 volumes 设置、代理配置、依赖安装等写成 setup.sh,方便新成员快速加入。
  • 考虑使用 Remote – SSH:如果未来团队都在同一台服务器上开发,可以改用 SSH 远程开发,彻底统一环境。
]]>
https://www.shuijingwanwq.com/2026/06/08/16544/feed/ 0
在 Trae CN 中尝试 Dev Containers:一次不太成功的踩坑记录 https://www.shuijingwanwq.com/2026/06/08/16533/ https://www.shuijingwanwq.com/2026/06/08/16533/#respond Mon, 08 Jun 2026 10:23:47 +0000 https://www.shuijingwanwq.com/?p=16533 浏览量: 36

写在前面

这篇博客就是想简单记录一下:我在 Trae CN 里折腾微软官方 Dev Containers 扩展的过程。先说结论:折腾了一圈,发现 Trae CN 目前(2026 年 6 月)还不支持 Dev Containers。所以这篇文章不会给出什么“完美方案”,最后只会留个引子——下一步我打算试试另一条路:宿主机 Go + 容器内运行 + Docker 扩展辅助,如果跑通了,再单独写一篇分享。

项目背景:我现在在 Ubuntu 26.04 上用 Trae CN 写 go-gin-learninghttps://github.com/shuijingwan/go-gin-learning),一个 Go + Gin 的小项目。

之前已经完成的两篇博客(都是已经发过的):

  1. 《在 Ubuntu 26.04 中基于 Docker Compose + Go 1.26.4 完成基础环境的搭建》
    https://www.shuijingwanwq.com/2026/06/03/15587/
    这篇主要把 Docker 环境、容器启动、MySQL/Redis 网络啥的都弄好了。
  2. 《Go + Gin 实战 RESTful API:从环境搭建(WSL/Docker/VS Code)到 Git 提交与 GitHub 托管》
    https://www.shuijingwanwq.com/2026/04/03/9416/
    这篇是在 Windows WSL + Docker + VS Code 上已经成功跑通的一套完整流程。现在我想在 Ubuntu + Docker + Trae CN 上把同样的事情再实现一遍。

所以这篇其实是一个中间的小插曲:我想试试在 Trae CN 里能不能也用 Dev Containers 把整个编辑器“搬进”容器里,结果发现…暂时不行。


一、为啥想试 Dev Containers?

用过 VS Code 的同学应该知道,Dev Containers 这个功能真的很香:你可以把整个开发环境(包括 Go 版本、工具链、扩展、终端)全部塞进一个 Docker 容器里。团队协作或者换机器的时候,打开项目点一下“Reopen in Container”就能直接开始干活,不用再装一堆东西。

之前在 Windows + WSL + VS Code 上我已经用得很顺手了(就是第二篇博客里写的那样)。所以换到 Ubuntu + Trae CN 之后,自然也想复刻一下这个体验。于是就有了下面的折腾过程。


二、踩坑过程实录

2.1 先配一下扩展市场地址

Trae CN 默认的扩展市场地址是空的,得自己填。我在设置里把 application.extensionMarketUrl 改成了 https://marketplace.visualstudio.com/

[截图 3:修改 application.extensionMarketUrl 设置]

[截图 3:修改 application.extensionMarketUrl 设置]

2.2 安装官方 Dev Containers 扩展

地址配好之后,就能在扩展商店搜到微软官方的 ms-vscode-remote.remote-containers 了。点击安装。

[截图 4:官方 Dev Containers 扩展的详情页]

[截图 4:官方 Dev Containers 扩展的详情页]

装完一看,状态栏写着 “用户已全局禁用此扩展”。嗯?我啥也没干啊……

[截图 5:扩展显示“用户已全局禁用此扩展”及右键菜单]

[截图 5:扩展显示“用户已全局禁用此扩展”及右键菜单]

2.3 尝试各种“启用”姿势

  • 点扩展详情页里的 “启用(工作区)” → 没反应。
  • 用命令面板 Extensions: Enable Extension 选 Dev Containers → 还是没反应。
  • 甚至在工作区设置里强行加上 "extensions.enabled" 配置 → 依然无效。
[截图 7:工作区设置中添加强制启用配置]

[截图 7:工作区设置中添加强制启用配置]

2.4 换个市场源试试?

我把市场地址换成 https://open-vsx.org/,重启 Trae CN 再搜 Dev Containers —— 结果发现 open-vsx 里根本搜不到微软官方的这个扩展,只出来一个叫 “Artizo Dev Containers for Trae” 的社区版。

[截图 8:社区版 Artizo Dev Containers for Trae 扩展(仅展示,我没敢装)]

[截图 8:社区版 Artizo Dev Containers for Trae 扩展(仅展示,我没敢装)]

说实话,对社区版我有点顾虑,没敢随便装。

2.5 最后试试离线安装 VSIX

我想,既然在线不行,那就手动下载 VSIX 文件吧。从 VS Code 市场扒下来一个 ms-vscode-remote.remote-containers-0.459.1.vsix,然后在 Trae CN 里用 “从 VSIX 安装” 导进去。

[截图 9:从本地 VSIX 文件安装扩展的文件选择对话框]

[截图 9:从本地 VSIX 文件安装扩展的文件选择对话框]

安装过程看着很正常,但装完之后……还是 “用户已全局禁用”。这就说明问题不在下载或安装环节,而是扩展本身跟 Trae CN 的激活机制不兼容。

2.6 顺手装了 Docker 扩展

虽然 Dev Containers 没戏,但我顺手把 ms-azuretools.vscode-docker(Container Tools)装上了,这个后面还能用。

[截图 1:Trae CN 扩展商店中 Docker 扩展的安装界面]

[截图 1:Trae CN 扩展商店中 Docker 扩展的安装界面]

另外 Docker 侧边栏里容器也在正常运行。

2.7 去官方论坛看了一眼

最后去 Trae 官方论坛搜了一下,果然有人问过:【反馈】Dev Containers 扩展无法使用。官方回复很明确:目前尚不支持 Dev Containers

好吧,死心了。


三、结论就是:目前真的不支持

总结一下这次尝试的结果:

  • 官方扩展装上了,但始终显示“用户已全局禁用”,没法激活。
  • open-vsx 市场根本搜不到官方版,只有一个社区版(我没装)。
  • 手动 VSIX 安装也救不了,一样禁用。
  • 官方论坛确认了:不支持。

所以,如果你也想在 Trae CN 里复现 VS Code 那种“一键进入容器”的开发体验,暂时别折腾了


四、那接下来打算怎么办?

虽然 Dev Containers 走不通,但开发还是得继续啊。我准备换一个思路,试试 “宿主机 Go + 容器内运行 + Docker 扩展辅助” 这种混合模式。大致的想法是:

  • 宿主机装个 Go SDK,让 Trae CN 的代码补全、跳转这些能正常工作。
  • 容器继续负责运行和测试,通过 Docker 扩展的“Attach Shell”在 IDE 里直接操作容器内的终端。
  • Git 操作用 Trae CN 自带的源代码管理面板(实际调的是宿主机的 Git),代码通过 volumes 挂载自动同步。

这个方案还没有正式跑起来,只是我下一步的计划。如果能顺利跑通,我再单独写一篇博客分享具体的配置和用法。

]]>
https://www.shuijingwanwq.com/2026/06/08/16533/feed/ 0
Ubuntu 26.04 + Docker 搭建 Go Gin 开发环境(全记录) https://www.shuijingwanwq.com/2026/06/03/15587/ https://www.shuijingwanwq.com/2026/06/03/15587/#respond Wed, 03 Jun 2026 11:44:06 +0000 https://www.shuijingwanwq.com/?p=15587 浏览量: 37

从 Windows WSL2 无缝迁移到 Ubuntu 裸机,基于现有 MySQL/Redis 容器构建 Go 开发环境,并接入自定义网络。

📌 前言

之前一直在 Windows 10 + WSL2 中学习 go-gin-learning 项目,现在换到了全新的 Ubuntu 26.04 系统。希望继续使用 Docker 来隔离开发环境,同时复用已经部署好的 MySQL 8.0 和 Redis 7.2 容器(位于自定义网络 services_dev-network 中)。

本文记录了从零开始配置的全部步骤,包含:

  • 系统工具检查与安装
  • Docker 环境验证
  • 项目代码克隆
  • 编写 Dockerfile 预装 git
  • 编写 docker-compose.yml 接入现有网络
  • 容器内运行 Gin 应用并测试连通性
  • 常见问题与避坑建议

🧰 一、准备工作:检查系统已有工具

在 Ubuntu 中养成“先检查,后安装”的习惯,可以避免重复操作。

1.1 检查 Git

git --version

输出示例(已安装):

git version 2.53.0

若未安装,执行:

sudo apt install git -y

1.2 检查 Docker

docker --version
docker compose version

输出示例

Docker version 29.5.2, build 79eb04c
Docker Compose version v5.1.4

若未安装,请参考 Docker 官方文档 安装。

建议:将当前用户加入 docker 组,避免每次输入 sudo

sudo usermod -aG docker $USER

然后注销并重新登录


🌐 二、确认已有数据库网络环境

之前已经在 ~/docker/services 中通过 docker-compose.yml 运行了 MySQL 8.0 和 Redis 7.2,并创建了自定义网络 services_dev-network

2.1 查看网络

docker network ls | grep dev-network

输出

71f462c6ef91   services_dev-network   bridge    local

2.2 查看数据库容器状态

docker ps --filter "name=mysql80" --filter "name=redis72"

输出

CONTAINER ID   IMAGE       ...   NAMES
9ec38ca384b6   redis:7.2   ...   redis72
4e93fd2e2c3f   mysql:8.0   ...   mysql80

💡 关键信息

  • MySQL 容器名:mysql80,内部端口 3306,宿主机映射端口 3307
  • Redis 容器名:redis72,内部端口 6379
  • 网络名:services_dev-network注意前缀,由 ~/docker/services 目录名派生)

📁 三、创建代码目录并克隆项目

选择一个语义清晰的目录存放项目代码,这里使用 ~/code(全小写,符合 Linux 惯例)。

mkdir -p ~/code
cd ~/code
git clone https://github.com/shuijingwan/go-gin-learning.git
cd go-gin-learning

检查项目结构:

ls -la

🐳 四、编写 Dockerfile(预装 git)

为了不在每次进入容器时手动安装 git,我们创建一个自定义镜像。

创建 Dockerfile

FROM golang:1.26-alpine

# 安装 git(go mod 下载某些依赖时需要)
RUN apk add --no-cache git

# 设置工作目录,与后面的 docker-compose 保持一致
WORKDIR /code

# 保持容器运行(开发模式)
CMD ["tail", "-f", "/dev/null"]

📌 说明

  • 使用 Alpine 版本镜像,体积小
  • apk add --no-cache 不保留缓存,减小镜像大小
  • WORKDIR /code 后续可以省略 docker-compose 中的 working_dir,但为了明确,两边都保留也没问题

⚙️ 五、编写 docker-compose.yml(接入现有网络)

关键点:

  • 使用 build: . 而不是 image: ...
  • 加入外部网络 services_dev-network
  • 传递数据库连接所需的环境变量
  • 删除已过时的 version 字段

最终 docker-compose.yml 内容:

services:
  go:
    build: .
    container_name: go-gin-learning
    working_dir: /code
    volumes:
      - ./:/code
    ports:
      - "8080:8080"
    tty: true
    stdin_open: true
    environment:
      - GOPROXY=https://goproxy.io,direct
      - GOSUMDB=sum.golang.google.cn
      - CGO_ENABLED=0
      # 数据库连接配置(使用现有网络中的服务名)
      - DB_HOST=mysql80
      - DB_PORT=3306
      - DB_USER=root
      - DB_PASSWORD=mystrongpwd80
      - DB_NAME=go_gin
      - REDIS_HOST=redis72
      - REDIS_PORT=6379
      - REDIS_PASSWORD=myredispass
    networks:
      - services_dev-network

networks:
  services_dev-network:
    external: true

⚠️ 注意

  • DB_PASSWORDREDIS_PASSWORD 要与 ~/docker/services/docker-compose.yml 中的密码完全一致
  • 容器间通信使用内部端口 3306 和 6379,而不是宿主机映射的 3307。

🚀 六、构建并启动开发容器

# 停止并删除旧容器(如果有)
docker compose down

# 构建镜像(--no-cache 确保重新安装 git)
docker compose build --no-cache

# 启动容器(后台运行)
docker compose up -d

查看运行状态:

docker ps --filter "name=go-gin-learning"

🧪 七、进入容器并验证连接

7.1 进入容器

docker exec -it go-gin-learning sh

此时提示符变为 /code #

7.2 验证 git 已安装

git --version

应输出类似 git version 2.52.0

7.3 测试网络连通性

# 安装测试工具(仅调试用,正式镜像可不加)
apk add iputils mysql-client redis

# ping 数据库容器
ping -c 2 mysql80
ping -c 2 redis72

7.4 测试 MySQL 连接(禁用 SSL)

MySQL 8.0 默认要求 SSL,但在容器内部使用 --ssl=0 即可绕过证书验证:

mariadb -h mysql80 -P 3306 -u root -pmystrongpwd80 -e "SHOW DATABASES;" --ssl=0

预期输出:如图1

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

💡 若使用 mysql 命令,请用 --ssl-mode=DISABLED

7.5 测试 Redis 连接

redis-cli -h redis72 -a myredispass PING

预期输出:如图2

预期输出:如图2
PONG

🏃 八、运行 Gin 应用

在容器内执行:

go run main.go

看到如下日志表示成功:如图3

看到如下日志表示成功:如图3
go: downloading github.com/go-playground/locales v0.14.1
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /albums                   --> main.getAlbums (3 handlers)
[GIN-debug] GET    /albums/:id               --> main.getAlbumByID (3 handlers)
[GIN-debug] POST   /albums                   --> main.postAlbums (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on 0.0.0.0:8080
[GIN] 2026/06/03 - 11:19:14 | 404 |  1.219µs |      172.18.0.1 | GET      "/"
[GIN] 2026/06/03 - 11:19:14 | 404 |    778ns |      172.18.0.1 | GET      "/favicon.ico"
[GIN] 2026/06/03 - 11:19:45 | 200 | 147.412µs |      172.18.0.1 | GET      "/albums"


在宿主机测试 API

打开另一个终端,执行:

curl http://localhost:8080/albums

或直接在浏览器访问 http://localhost:8080/albums

📸 浏览器显示 JSON 数据,如图4


🧹 九、常用管理命令

操作命令
启动开发容器cd ~/code/go-gin-learning && docker compose up -d
停止容器docker compose down
重新构建镜像docker compose build --no-cache
查看日志docker compose logs -f
进入容器docker exec -it go-gin-learning sh
重启 MySQL/Redis(若需要)cd ~/docker/services && docker compose restart

⚠️ 十、避坑指南

10.1 容器内 git 缺失导致 go run 失败

现象

unable to resolve git version: exec: "git": executable file not found in $PATH

解决:使用自定义 Dockerfile 安装 git,见第四章。

10.2 MySQL 连接报 TLS/SSL 错误

现象

ERROR 2026 (HY000): TLS/SSL error: Certificate verification failure

解决:在连接命令中添加 --ssl=0(mariadb)或 --ssl-mode=DISABLED(mysql)。

10.3 容器无法访问 MySQL/Redis

原因:未加入正确的网络,或网络名称写错。

解决

  • 确认 docker network ls 中有 services_dev-network
  • 检查 docker-compose.yml 中 networks 名称是否完全一致(包括下划线)
  • 在容器内 ping mysql80 测试

10.4 宿主机无法访问 8080 端口

原因:Gin 监听的是 127.0.0.1:8080 而不是 0.0.0.0:8080,导致端口映射失效。

解决:在代码中设置 router.Run(":8080")router.Run("0.0.0.0:8080")


📝 十一、总结

通过本次实践,我实现了:

  1. ✅ 在 Ubuntu 26.04 上搭建完整的 Go 开发环境
  2. ✅ 利用已有的 MySQL/Redis 容器(独立部署)和自定义网络
  3. ✅ 构建带 git 的 Go 1.26 Alpine 开发镜像
  4. ✅ 编写 docker-compose.yml 挂载代码并接入外部网络
  5. ✅ 在容器内成功运行 Gin 应用并验证数据库连通性

这种“数据库与代码分离容器”的模式非常适合多项目共用基础设施,既节省资源,又保持环境一致性。

下一步,便可以:

  • main.go 中编写连接 MySQL/Redis 的业务逻辑
  • 使用任意代码编辑器(如 VS Code、Sublime 等)直接编辑项目文件,保存后容器内实时同步
  • docker-compose.yml 加入版本控制,与队友共享环境配置

🔗 参考资料

]]>
https://www.shuijingwanwq.com/2026/06/03/15587/feed/ 0
Go + Gin 实战 RESTful API:从环境搭建(WSL/Docker/VS Code)到 Git 提交与 GitHub 托管 https://www.shuijingwanwq.com/2026/04/03/9416/ https://www.shuijingwanwq.com/2026/04/03/9416/#respond Fri, 03 Apr 2026 04:11:30 +0000 https://www.shuijingwanwq.com/?p=9416 浏览量: 196

1、参考:使用 Go 和 Gin 构建 RESTful API(Go.dev) https://go.dev/doc/tutorial/web-service-gin — 使用 Gin 构建简单 Web 服务的 Go 官方教程。

2、安装 Go。Docker Compose 一键启动(参考 Hyperf 项目化)。我想要 “写好配置,一条命令启动整个开发环境”,用 docker-compose.yml 最为方便,和 Hyperf 的 Docker Compose 用法几乎一样。创建项目文件夹:web-service-gin



ubuntu@DESKTOP-H4MGQIU:~/wwwroot$ mkdir web-service-gin
ubuntu@DESKTOP-H4MGQIU:~/wwwroot$ cd web-service-gin
ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ pwd
/home/ubuntu/wwwroot/web-service-gin


3、创建 docker-compose.yml



version: '3.8'

services:
  go:
    image: golang:1.23-alpine
    container_name: go-gin-tutorial
    working_dir: /app
    volumes:
      - ./:/app         # 本地代码挂载
    ports:
      - "8080:8080"     # 映射端口最好加引号
    tty: true
    stdin_open: true
    environment:
      - GOPROXY=https://goproxy.io,direct
    command: tail -f /dev/null   # 容器启动后保持运行状态


4、启动容器(进入 Go 环境), 报错:WSL Ubuntu 里只装了 Docker,没装 Docker Compose。



ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ docker-compose up -d
Command 'docker-compose' not found, but can be installed with:
sudo snap install docker          # version 28.4.0, or
sudo apt  install docker-compose  # version 1.29.2-1
See 'snap info docker' for additional versions.
ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ sudo apt update && sudo apt install -y docker-compose
[sudo] password for ubuntu:
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
Hit:2 https://download.docker.com/linux/ubuntu jammy InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:4 https://packages.redis.io/deb jammy InRelease
Get:5 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [127 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [3328 kB]
Get:8 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 c-n-f Metadata [30.4 kB]
Fetched 3743 kB in 7s (575 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
62 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  docker-ce docker-ce-cli python3-attr python3-certifi python3-chardet python3-distutils python3-docker python3-dockerpty python3-docopt python3-dotenv python3-idna python3-jsonschema
  python3-lib2to3 python3-pyrsistent python3-requests python3-setuptools python3-texttable python3-urllib3 python3-websocket
Suggested packages:
  cgroupfs-mount | cgroup-lite python-attr-doc python-jsonschema-doc python3-openssl python3-socks python-requests-doc python-setuptools-doc
Recommended packages:
  docker.io
The following NEW packages will be installed:
  docker-compose python3-attr python3-certifi python3-chardet python3-distutils python3-docker python3-dockerpty python3-docopt python3-dotenv python3-idna python3-jsonschema
  python3-lib2to3 python3-pyrsistent python3-requests python3-setuptools python3-texttable python3-urllib3 python3-websocket
The following packages will be upgraded:
  docker-ce docker-ce-cli
2 upgraded, 18 newly installed, 0 to remove and 60 not upgraded.
Need to get 40.4 MB of archives.
After this operation, 7757 kB of additional disk space will be used.
Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:29.3.1-1~ubuntu.22.04~jammy [16.4 MB]
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-lib2to3 all 3.10.8-1~22.04 [77.6 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-distutils all 3.10.8-1~22.04 [139 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy/main amd64 python3-certifi all 2020.6.20-1 [150 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 python3-chardet all 4.0.0-1 [98.0 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-idna all 3.3-1ubuntu0.1 [52.1 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-urllib3 all 1.26.5-1~exp1ubuntu0.6 [98.7 kB]
Get:8 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-requests all 2.25.1+dfsg-2ubuntu0.3 [48.8 kB]
Get:9 http://archive.ubuntu.com/ubuntu jammy/universe amd64 python3-websocket all 1.2.3-1 [34.7 kB]
Get:10 http://archive.ubuntu.com/ubuntu jammy/universe amd64 python3-docker all 5.0.3-1 [89.3 kB]
Get:11 http://archive.ubuntu.com/ubuntu jammy/universe amd64 python3-dockerpty all 0.4.1-2 [11.1 kB]
Get:12 http://archive.ubuntu.com/ubuntu jammy/universe amd64 python3-docopt all 0.6.2-4 [26.9 kB]
Get:13 http://archive.ubuntu.com/ubuntu jammy/universe amd64 python3-dotenv all 0.19.2-1 [20.5 kB]
Get:14 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-attr all 21.2.0-1ubuntu1 [43.9 kB]
Get:15 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-setuptools all 59.6.0-1.2ubuntu0.22.04.3 [340 kB]
Get:16 http://archive.ubuntu.com/ubuntu jammy/main amd64 python3-pyrsistent amd64 0.18.1-1build1 [55.5 kB]
Get:17 http://archive.ubuntu.com/ubuntu jammy/main amd64 python3-jsonschema all 3.2.0-0ubuntu2 [43.1 kB]
Get:18 http://archive.ubuntu.com/ubuntu jammy/universe amd64 python3-texttable all 1.6.4-1 [11.4 kB]
Get:19 http://archive.ubuntu.com/ubuntu jammy/universe amd64 docker-compose all 1.29.2-1 [95.8 kB]
Get:20 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:29.3.1-1~ubuntu.22.04~jammy [22.6 MB]
Fetched 40.4 MB in 10s (3969 kB/s)
(Reading database ... 24579 files and directories currently installed.)
Preparing to unpack .../00-docker-ce-cli_5%3a29.3.1-1~ubuntu.22.04~jammy_amd64.deb ...
Unpacking docker-ce-cli (5:29.3.1-1~ubuntu.22.04~jammy) over (5:29.3.0-1~ubuntu.22.04~jammy) ...
Preparing to unpack .../01-docker-ce_5%3a29.3.1-1~ubuntu.22.04~jammy_amd64.deb ...
Unpacking docker-ce (5:29.3.1-1~ubuntu.22.04~jammy) over (5:29.3.0-1~ubuntu.22.04~jammy) ...
Selecting previously unselected package python3-lib2to3.
Preparing to unpack .../02-python3-lib2to3_3.10.8-1~22.04_all.deb ...
Unpacking python3-lib2to3 (3.10.8-1~22.04) ...
Selecting previously unselected package python3-distutils.
Preparing to unpack .../03-python3-distutils_3.10.8-1~22.04_all.deb ...
Unpacking python3-distutils (3.10.8-1~22.04) ...
Selecting previously unselected package python3-certifi.
Preparing to unpack .../04-python3-certifi_2020.6.20-1_all.deb ...
Unpacking python3-certifi (2020.6.20-1) ...
Selecting previously unselected package python3-chardet.
Preparing to unpack .../05-python3-chardet_4.0.0-1_all.deb ...
Unpacking python3-chardet (4.0.0-1) ...
Selecting previously unselected package python3-idna.
Preparing to unpack .../06-python3-idna_3.3-1ubuntu0.1_all.deb ...
Unpacking python3-idna (3.3-1ubuntu0.1) ...
Selecting previously unselected package python3-urllib3.
Preparing to unpack .../07-python3-urllib3_1.26.5-1~exp1ubuntu0.6_all.deb ...
Unpacking python3-urllib3 (1.26.5-1~exp1ubuntu0.6) ...
Selecting previously unselected package python3-requests.
Preparing to unpack .../08-python3-requests_2.25.1+dfsg-2ubuntu0.3_all.deb ...
Unpacking python3-requests (2.25.1+dfsg-2ubuntu0.3) ...
Selecting previously unselected package python3-websocket.
Preparing to unpack .../09-python3-websocket_1.2.3-1_all.deb ...
Unpacking python3-websocket (1.2.3-1) ...
Selecting previously unselected package python3-docker.
Preparing to unpack .../10-python3-docker_5.0.3-1_all.deb ...
Unpacking python3-docker (5.0.3-1) ...
Selecting previously unselected package python3-dockerpty.
Preparing to unpack .../11-python3-dockerpty_0.4.1-2_all.deb ...
Unpacking python3-dockerpty (0.4.1-2) ...
Selecting previously unselected package python3-docopt.
Preparing to unpack .../12-python3-docopt_0.6.2-4_all.deb ...
Unpacking python3-docopt (0.6.2-4) ...
Selecting previously unselected package python3-dotenv.
Preparing to unpack .../13-python3-dotenv_0.19.2-1_all.deb ...
Unpacking python3-dotenv (0.19.2-1) ...
Selecting previously unselected package python3-attr.
Preparing to unpack .../14-python3-attr_21.2.0-1ubuntu1_all.deb ...
Unpacking python3-attr (21.2.0-1ubuntu1) ...
Selecting previously unselected package python3-setuptools.
Preparing to unpack .../15-python3-setuptools_59.6.0-1.2ubuntu0.22.04.3_all.deb ...
Unpacking python3-setuptools (59.6.0-1.2ubuntu0.22.04.3) ...
Selecting previously unselected package python3-pyrsistent:amd64.
Preparing to unpack .../16-python3-pyrsistent_0.18.1-1build1_amd64.deb ...
Unpacking python3-pyrsistent:amd64 (0.18.1-1build1) ...
Selecting previously unselected package python3-jsonschema.
Preparing to unpack .../17-python3-jsonschema_3.2.0-0ubuntu2_all.deb ...
Unpacking python3-jsonschema (3.2.0-0ubuntu2) ...
Selecting previously unselected package python3-texttable.
Preparing to unpack .../18-python3-texttable_1.6.4-1_all.deb ...
Unpacking python3-texttable (1.6.4-1) ...
Selecting previously unselected package docker-compose.
Preparing to unpack .../19-docker-compose_1.29.2-1_all.deb ...
Unpacking docker-compose (1.29.2-1) ...
Setting up python3-dotenv (0.19.2-1) ...
Setting up python3-attr (21.2.0-1ubuntu1) ...
Setting up python3-texttable (1.6.4-1) ...
Setting up python3-docopt (0.6.2-4) ...
Setting up python3-chardet (4.0.0-1) ...
Setting up python3-certifi (2020.6.20-1) ...
Setting up python3-idna (3.3-1ubuntu0.1) ...
Setting up python3-urllib3 (1.26.5-1~exp1ubuntu0.6) ...
Setting up docker-ce-cli (5:29.3.1-1~ubuntu.22.04~jammy) ...
Setting up python3-pyrsistent:amd64 (0.18.1-1build1) ...
Setting up python3-lib2to3 (3.10.8-1~22.04) ...
Setting up python3-websocket (1.2.3-1) ...
Setting up python3-dockerpty (0.4.1-2) ...
Setting up python3-distutils (3.10.8-1~22.04) ...
Setting up python3-setuptools (59.6.0-1.2ubuntu0.22.04.3) ...
Setting up python3-jsonschema (3.2.0-0ubuntu2) ...
Setting up docker-ce (5:29.3.1-1~ubuntu.22.04~jammy) ...
Setting up python3-requests (2.25.1+dfsg-2ubuntu0.3) ...
Setting up python3-docker (5.0.3-1) ...
Setting up docker-compose (1.29.2-1) ...
Processing triggers for man-db (2.10.2-1) ...
ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ docker-compose --version
docker-compose version 1.29.2, build unknown
ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ docker-compose up -d
Creating network "web-service-gin_default" with the default driver
Pulling go (golang:1.23-alpine)...
1.23-alpine: Pulling from library/golang
4f4fb700ef54: Pull complete
9824c27679d3: Pull complete
8371a51cbc44: Pull complete
d5791340ef18: Pull complete
d3178a7b2709: Pull complete
28f6f92c256d: Download complete
d1ac4f409af1: Download complete
Digest: sha256:383395b794dffa5b53012a212365d40c8e37109a626ca30d6151c8348d380b5f
Status: Downloaded newer image for golang:1.23-alpine
Creating go-gin-tutorial ... done
ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ docker-compose exec go sh
/app # ls -la
total 12
drwxr-xr-x    2 1000     1000          4096 Mar 30 03:36 .
drwxr-xr-x    1 root     root          4096 Mar 30 03:40 ..
-rw-r--r--    1 1000     1000           272 Mar 30 03:36 docker-compose.yml


5、创建一个可以管理依赖项的模块。运行该go mod init命令,并指定代码所在模块的路径。



/app # go mod init example/web-service-gin
go: creating new go.mod: module example/web-service-gin


6、打算用 GoLand(Windows)直接编辑 WSL 里的 Go 代码,以配合我的 Docker 环境。我的 Go 代码存在 WSL Ubuntu 的文件夹里,GoLand 可以直接访问 WSL 文件,就像访问本地文件夹一样。现在的代码在这里:~/wwwroot/web-service-gin。在 Windows 里访问这个路径,就是:\wsl$\Ubuntu\home\ubuntu\wwwroot\web-service-gin。 GoLand 打开这个文件夹,打开 GoLand,点 Open(打开),把上面复制的路径直接粘贴到文件夹地址栏,按回车,选择文件夹 → OK。现在就能在 Windows GoLand 里编辑、修改、保存 WSL 里的 Go 代码了。而且修改会实时同步到 Docker 容器里!如图1

在 Windows 里访问这个路径,就是:\wsl$\Ubuntu\home\ubuntu\wwwroot\web-service-gin

7、配置 GoLand 连接 WSL 里的 Docker(关键)
重启后:
文件 → 设置 → 构建、执行、部署 → Docker
左上角 + 添加连接
连接类型选择:WSL(重点:不要选 Docker Desktop)
发行版下拉选择:Ubuntu
底部显示「连接成功」即可
应用 → 确定。如图2

配置 GoLand 连接 WSL 里的 Docker

8、文件 → 设置 → 运行目标,添加 → 选 Docker Compose,点击右上角 +选择:✅ Docker Compose。运行目标(Docker Compose)配置完成后,GoLand 会获得:只管【运行】,不管【代码提示】
它的作用只有:
点 ▶️ 运行时
代码在 Docker 容器里执行。如图3

文件 → 设置 → 运行目标,添加 → 选 Docker Compose

9、项目默认目标:go。如图4

项目默认目标:go

10、代码提示、自动补全、语法识别 必须靠 GOROOT
GoLand 要想识别:
string
int
fmt
函数跳转
自动补全
必须配置:本地 GOROOT这是 IDE 硬性规则。打开 WSL Ubuntu 终端,复制运行:



# 1. 下载 Go 1.23(和容器版本一样)
wget https://dl.google.com/go/go1.23.0.linux-amd64.tar.gz

# 2. 安装到 Linux 标准路径:/usr/local/go
sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz

# 3. 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

# 4. 验证安装成功
go version


11、打开 GoLand 设置 → Go → GOROOT
点 + 添加
选择 WSL
自动找到 /usr/local/go
确定 → 应用。如图5

打开 GoLand 设置 → Go → GOROOT

12、创建数据,创建一个名为 main.go 的文件。将在这个文件中编写 Go 代码。



package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// album represents data about a record album.
type album struct {
	ID     string  `json:"id"`
	Title  string  `json:"title"`
	Artist string  `json:"artist"`
	Price  float64 `json:"price"`
}

// albums slice to seed record album data.
var albums = []album{
	{ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},
	{ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},
	{ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99},
}

func main() {
	router := gin.Default()
	router.GET("/albums", getAlbums)

	router.Run("0.0.0.0:8080") // 监听所有网卡
}

// getAlbums responds with the list of all albums as JSON.
func getAlbums(c *gin.Context) {
	c.IndentedJSON(http.StatusOK, albums)
}


13、现在 IDE 有一些报错的提示:

无法解析符号’github.com’
无法解析符号’gin-gonic’
无法解析符号’gin’
未解析的引用 ‘Default’。如图6

现在 IDE 有一些报错的提示

14、打开 WSL 终端,在 WSL 直接执行:go get github.com/gin-gonic/gin



ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ go get github.com/gin-gonic/gin
go: downloading github.com/gin-gonic/gin v1.12.0
go: github.com/gin-gonic/gin@v1.12.0 requires go >= 1.25.0; switching to go1.25.8
go: downloading github.com/gin-contrib/sse v1.1.0
go: downloading github.com/mattn/go-isatty v0.0.20
go: downloading github.com/quic-go/quic-go v0.59.0
go: downloading golang.org/x/net v0.51.0
go: downloading github.com/bytedance/sonic v1.15.0
go: downloading github.com/goccy/go-json v0.10.5
go: downloading github.com/json-iterator/go v1.1.12
go: downloading github.com/goccy/go-yaml v1.19.2
go: downloading github.com/pelletier/go-toml/v2 v2.2.4
go: downloading github.com/ugorji/go/codec v1.3.1
go: downloading go.mongodb.org/mongo-driver/v2 v2.5.0
go: downloading google.golang.org/protobuf v1.36.10
go: downloading github.com/go-playground/validator/v10 v10.30.1
go: downloading golang.org/x/sys v0.41.0
go: downloading github.com/quic-go/qpack v0.6.0
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading github.com/modern-go/reflect2 v1.0.2
go: downloading github.com/gabriel-vasile/mimetype v1.4.12
go: downloading github.com/go-playground/universal-translator v0.18.1
go: downloading github.com/leodido/go-urn v1.4.0
go: downloading golang.org/x/crypto v0.48.0
go: downloading golang.org/x/text v0.34.0
go: downloading github.com/bytedance/gopkg v0.1.3
go: downloading github.com/cloudwego/base64x v0.1.6
go: downloading golang.org/x/arch v0.22.0
go: downloading github.com/go-playground/locales v0.14.1
go: downloading github.com/klauspost/cpuid/v2 v2.3.0
go: downloading github.com/bytedance/sonic/loader v0.5.0
go: downloading github.com/twitchyliquid64/golang-asm v0.15.1
go: updating go.mod: open /home/ubuntu/wwwroot/web-service-gin/go.mod: permission denied

15、反省一下,感觉现在这样太痛苦了。这种 “容器里装依赖、容器外装依赖” 的用法,是错误、混乱、反人类的!** 容器的优势就是环境统一、隔离、不用乱装东西。现在被用成了:一边容器、一边 WSL,精神分裂!真正正确的开发模式只有两种:只用 WSL 的 Go,不用 Docker 跑开发;全部在 Docker 里,WSL 什么都不装;

16、仔细排查原因,找到了根源,在 文件 → 设置 → 构建、执行、部署 → Docker 中,虚拟机路径:/home/ubuntu/wwwroot/web-service-gin,这个路径是 WSL 中的路径。** 正确的路径 不应该是 WSL 路径!应该是【容器内部的路径】!**。虚拟机路径修改为:/app。如图7

虚拟机路径修改为:/app

17、发现 GOROOT 中仍然不提供 Docker 的选项。GoLand 在「没有 Docker Desktop」的环境下,就是无法直接选择容器内的 GOROOT!最终决定,放弃 GoLand,改用 VS Code + Dev Containers

18、Windows 安装 VS Code,VS Code 扩展商店安装:Dev Containers(微软官方)、WSL、Docker

19、启动容器,报错:ERROR: for go ‘ContainerConfig’,这是老容器 + Python V1 的兼容性问题

<pre class="wp-block-syntaxhighlighter-code">

ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ docker-compose up -d
Recreating 814a800e96e6_go-gin-tutorial ...

ERROR: for 814a800e96e6_go-gin-tutorial  'ContainerConfig'

ERROR: for go  'ContainerConfig'
Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 203, in perform_command
    handler(command, command_options)
  File "/usr/lib/python3/dist-packages/compose/metrics/decorator.py", line 18, in wrapper
    result = fn(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 1186, in up
    to_attach = up(False)
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 1166, in up
    return self.project.up(
  File "/usr/lib/python3/dist-packages/compose/project.py", line 697, in up
    results, errors = parallel.parallel_execute(
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/dist-packages/compose/project.py", line 679, in do
    return service.execute_convergence_plan(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 579, in execute_convergence_plan
    return self._execute_convergence_recreate(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 499, in _execute_convergence_recreate
    containers, errors = parallel_execute(
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/dist-packages/compose/service.py", line 494, in recreate
    return self.recreate_container(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 612, in recreate_container
    new_container = self.create_container(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 330, in create_container
    container_options = self._get_container_create_options(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 921, in _get_container_create_options
    container_options, override_options = self._build_container_volume_options(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 960, in _build_container_volume_options
    binds, affinity = merge_volume_bindings(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 1548, in merge_volume_bindings
    old_volumes, old_mounts = get_container_data_volumes(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 1579, in get_container_data_volumes
    container.image_config['ContainerConfig'].get('Volumes') or {}
KeyError: 'ContainerConfig'

</pre>

20、进入目录:~/wwwroot/web-service-gin,执行 :code .。是否信任此文件夹中的文件的作者? 是。如图8

进入目录:~/wwwroot/web-service-gin,执行 :code .。是否信任此文件夹中的文件的作者? 是


ubuntu@DESKTOP-H4MGQIU:~/wwwroot/web-service-gin$ code .
Installing VS Code Server for Linux x64 (cfbea10c5ffb233ea9177d34726e6056e89913dc)
Downloading: 100%
Unpacking: 100%
Unpacked 3690 files and folders to /home/ubuntu/.vscode-server/bin/cfbea10c5ffb233ea9177d34726e6056e89913dc.
Looking for compatibility check script at /home/ubuntu/.vscode-server/bin/cfbea10c5ffb233ea9177d34726e6056e89913dc/bin/helpers/check-requirements.sh
Running compatibility check script
Compatibility check successful (0)


21、删除 .idea 目录,这是 Goland 留下的。准备 Dev Container 配置文件,直接用已有 Docker 镜像,新建:.devcontainer/devcontainer.json


{
  "name": "Go Gin Dev Container",
  "dockerComposeFile": ["../docker-compose.yml"],
  "service": "go",
  "workspaceFolder": "/app",
  "settings": {
    "terminal.integrated.shell.linux": "/bin/sh"
  },
  "extensions": [
    "golang.Go"
  ],
  "forwardPorts": [8080],
  "remoteUser": "root"
}

解释:

dockerComposeFile 指向 docker-compose.yml
service 是希望 VS Code 连接的服务(这里是 go)
workspaceFolder 是代码挂载目录 /app
extensions 自动在容器里安装 Go 插件
forwardPorts 映射容器端口到 VS Code
remoteUser 可选,如果容器里默认用户不是 root

22、VS Code 打开容器
打开 VS Code,进入项目目录
按 F1 → 输入 Dev Containers: Reopen in Container
VS Code 会根据 devcontainer.json 和 docker-compose.yml 启动容器并挂载代码
打开终端,会发现直接在容器里(/app),Go 版本和 Docker 镜像一致

⚡ 提示:如果容器启动慢,可以先用 docker-compose up -d 启动容器,再用 Dev Container 连接。如图9

VS Code 打开容器

23、开发流程建议
用 Dev Container 打开项目
直接在容器终端运行 Go 或 PHP 命令
容器里安装依赖(go mod tidy、composer install 等)
在 VS Code 中调试、运行、测试
不需要关心 WSL 上是否安装 Go/PHP

24、多项目 + 多容器流程图

┌─────────────────────────────────────────────────────────────┐
│ VS Code │
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Project-Go │ │ Project-PHP74 │ │ Project-PHP81 │ │
│ │ Workspace │ │ Workspace │ │ Workspace │ │
│ │ (.code-workspace) │ │ (.code-workspace) │ │ (.code-workspace) │ │
│ │ Dev Container │ │ Dev Container │ │ Dev Container │ │
│ │ Service: go │ │ Service: php74 │ │ Service: php81 │ │
│ │ Image: golang:1.23 │ │ Image: php:7.4-fpm │ │ Image: php:8.1-fpm │ │
│ │ Ports: 8080 │ │ Ports: 8000 │ │ Ports: 8001 │ │
│ └─────────────┬───────┘ └─────────────┬───────┘ └─────────────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Docker Container Go │ │ Docker Container │ │ Docker Container │ │
│ │ Version: 1.23 │ │ PHP 7.4 FPM │ │ PHP 8.1 FPM │ │
│ │ /app ← 挂载项目代码 │ │ /app ← 挂载项目代码 │ │ /app ← 挂载项目代码 │ │
│ │ 端口 8080 映射本地 │ │ 端口 8000 映射本地 │ │ 端口 8001 映射本地 │ │
│ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

说明:

  • 每个 VS Code 窗口对应一个独立 Workspace(项目)
  • 每个 Workspace 使用独立 Dev Container 连接对应 Docker 容器
  • 容器内挂载 /app 到对应项目代码,开发和运行环境完全一致
  • 不同项目端口独立映射,本地访问互不冲突

25、以下是 web-service-gin 项目的完整流程图,显示 VS Code、Dev Container、Docker 容器、挂载路径和端口映射,完全贴合本地开发环境。

┌───────────────────────────────────────────────────────────────────────────────┐
│ VS Code Window │
│ (web-service-gin Workspace) │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Dev Container (Go) │ │
│ │ Service: go │ │
│ │ Image: golang:1.23-alpine │ │
│ │ WorkspaceFolder: /app │ │
│ │ Extensions: golang.Go │ │
│ │ ForwardPorts: 8080 │ │
│ │ RemoteUser: root │ │
│ └───────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Docker Container (Go) │ │
│ │ Container Name: go-gin-tutorial │ │
│ │ Go Version: 1.23 │ │
│ │ Command: tail -f /dev/null │ │
│ │ Working Dir: /app │ │
│ │ Volume Mount: ./ (本地代码) → /app │ │
│ │ Port Mapping: 8080 → 8080 (本地访问 Gin Web) │ │
│ │ Environment: GOPROXY=https://goproxy.io,direct │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ 编辑流程:VS Code 编辑器 → Dev Container → Docker 容器运行 → 本地端口访问 Web │
└───────────────────────────────────────────────────────────────────────────────┘

26、以下是 宽屏版多项目组合图,展示 Go + PHP74 + PHP81 三个项目的 VS Code Workspace、Dev Container、Docker 容器、挂载路径和端口映射,横向排列,方便直观理解多项目、多语言、多容器的本地开发环境:

┌───────────────────────────────────────────────────────────────────────────────────────────────┐
│ VS Code Windows │
│ (各自 Workspace 独立窗口) │
│ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │
│ │ Project-Go Workspace │ │ Project-PHP74 Workspace │ │ Project-PHP81 Workspace │ │
│ │ (.code-workspace) │ │ (.code-workspace) │ │ (.code-workspace) │ │
│ │ Dev Container: go │ │ Dev Container: php74 │ │ Dev Container: php81 │ │
│ │ Image: golang:1.23-alpine │ │ Image: php:7.4-fpm │ │ Image: php:8.1-fpm │ │
│ │ ForwardPorts: 8080 │ │ ForwardPorts: 8000 │ │ ForwardPorts: 8001 │ │
│ │ RemoteUser: root │ │ RemoteUser: root │ │ RemoteUser: root │ │
│ └───────────────┬─────────────┘ └───────────────┬─────────────┘ └───────────────┬─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │
│ │ Docker Container Go │ │ Docker Container PHP 7.4 │ │ Docker Container PHP 8.1 │ │
│ │ Name: go-gin-tutorial │ │ Name: php74-dev │ │ Name: php81-dev │ │
│ │ Version: 1.23 │ │ Version: 7.4 FPM │ │ Version: 8.1 FPM │ │
│ │ Working Dir: /app │ │ Working Dir: /app │ │ Working Dir: /app │ │
│ │ Volume Mount: ./ → /app │ │ Volume Mount: ./ → /app │ │ Volume Mount: ./ → /app │ │
│ │ Port Mapping: 8080 → 8080 │ │ Port Mapping: 8000 → 8000 │ │ Port Mapping: 8001 → 8001 │ │
│ │ Command: tail -f /dev/null │ │ Command: tail -f /dev/null │ │ Command: tail -f /dev/null │ │
│ │ Environment: GOPROXY=… │ │ │ │ │ │
│ └─────────────────────────────┘ └─────────────────────────────┘ └─────────────────────────────┘ │
│ │
│ 开发流程说明: │
│ VS Code 编辑 → Dev Container → Docker 容器运行 → 挂载代码 → 本地端口访问 Web/服务 │
│ 多项目、多语言版本独立,端口互不冲突,环境一致 │
└───────────────────────────────────────────────────────────────────────────────────────────────┘

图示说明

  1. VS Code Windows / Workspace
    每个项目对应一个 VS Code 窗口
    .code-workspace 配置独立
    插件、调试、终端完全隔离
  2. Dev Container
    连接对应 Docker 容器
    WorkspaceFolder 映射 /app
    ForwardPorts 映射本地访问端口
    插件和调试工具在容器内部运行
  3. Docker 容器
    Go / PHP 版本与镜像一致
    挂载本地代码,容器内修改即生效
    容器端口映射到本地端口,访问服务方便
    每个容器独立运行,不会影响其他项目
  4. 开发流程
    在 VS Code 编辑器编辑代码
    代码挂载到 Dev Container → Docker 容器
    容器运行服务或编译命令
    本地浏览器访问对应端口

优势

每个项目都是独立环境,类似 PHPStorm SDK + 项目隔离
多语言版本支持(Go + PHP74 + PHP81)
端口映射互不冲突,可同时运行多个服务
VS Code 窗口对应项目 Workspace,完全独立

27、我现在要如何将 APP [开发容器: GO GIN DEV CONTAINER] 转换为一个工作区呢?在 VS Code 中直接引用容器路径
打开 命令面板(Ctrl+Shift+P / Cmd+Shift+P)
输入 Save Workspace As…
点击 显示本地,保存至 C:\Users\Thinkpad\VSCodeWorkspaces\go-gin-tutorial-app.code-workspace。如图10

我现在要如何将 APP [开发容器: GO GIN DEV CONTAINER] 转换为一个工作区呢?

28、新开 vs code 后,文件 – 从文件打开工作区 – 显示本地 – C:\Users\Thinkpad\VSCodeWorkspaces\go-gin-tutorial-app.code-workspace。

29、现在在 vs code 中,问题:could not import github.com/gin-gonic/gin (no required module provides package “github.com/gin-gonic/gin”)。这是 Go Modules 依赖没安装或者未初始化 的典型错误。如图11

现在在 vs code 中,问题:could not import github.com/gin-gonic/gin (no required module provides package "github.com/gin-gonic/gin")

30、运行代码 开始将 Gin 模块作为依赖项进行跟踪。在命令行中,使用该go get 命令将 github.com/gin-gonic/gin 模块添加为模块的依赖项。使用点号参数表示“获取当前目录中代码的依赖项”。在 VS Code 里进入容器执行命令,默认打开的就是容器内的终端,路径应该是 /app,Go 已解析并下载此依赖项,以满足import 在上一步中添加的声明。如图12

在命令行中,使用该go get 命令将 github.com/gin-gonic/gin 模块添加为您的模块的依赖项。


/app # pwd
/app
/app # go get .
go: github.com/gin-gonic/gin@v1.12.0 requires go >= 1.25.0 (running go 1.23.12; GOTOOLCHAIN=local)
/app # 

31、在包含 main.go 的目录中,从命令行运行代码。使用点号参数表示“在当前目录中运行代码”。报错:


/app # go run .
main.go:6:2: no required module provides package github.com/gin-gonic/gin; to add it:
        go get github.com/gin-gonic/gin
/app # 

32、找到了根源,当前容器里的 Go 版本是 1.23.12,Gin v1.12.0 需要 Go ≥ 1.25.0,所以即使执行了 go get . 或 go get github.com/gin-gonic/gin,也会失败,VS Code 就提示:no required module provides package github.com/gin-gonic/gin。

33、编辑 docker-compose.yml,升级 Go 镜像版本,golang:1.23-alpine 修改为 golang:1.26-alpine



version: '3.8'

services:
  go:
    image: golang:1.26-alpine
    container_name: go-gin-tutorial
    working_dir: /app
    volumes:
      - ./:/app         # 本地代码挂载
    ports:
      - "8080:8080"     # 映射端口最好加引号
    tty: true
    stdin_open: true
    environment:
      - GOPROXY=https://goproxy.io,direct
    command: tail -f /dev/null   # 容器启动后保持运行状态


34、容器重建流程(VS Code 内完成)
修改 docker-compose.yml 升级 Go 镜像版本
命令面板 Ctrl+Shift+P → 输入:
Dev Containers: Rebuild and Reopen in Container
VS Code 会销毁旧容器并基于新镜像创建新容器
打开终端执行第 4 步命令,Gin 环境就绪

✅ 工作区 .code-workspace 和本地代码不会丢失
✅ 容器里的 Go 版本和 Gin 依赖都是最新

35、再次执行 go get . 命令,未提示版本问题,正确执行。


/app # go get .
go: downloading github.com/gin-gonic/gin v1.12.0
go: downloading github.com/gin-contrib/sse v1.1.0
go: downloading github.com/mattn/go-isatty v0.0.20
go: downloading golang.org/x/net v0.51.0
go: downloading github.com/quic-go/quic-go v0.59.0
go: downloading github.com/go-playground/validator/v10 v10.30.1
go: downloading github.com/goccy/go-yaml v1.19.2
go: downloading github.com/pelletier/go-toml/v2 v2.2.4
go: downloading github.com/bytedance/sonic v1.15.0
go: downloading github.com/ugorji/go/codec v1.3.1
go: downloading github.com/goccy/go-json v0.10.5
go: downloading go.mongodb.org/mongo-driver/v2 v2.5.0
go: downloading github.com/json-iterator/go v1.1.12
go: downloading google.golang.org/protobuf v1.36.10
go: downloading golang.org/x/sys v0.41.0
go: downloading github.com/quic-go/qpack v0.6.0
go: downloading github.com/gabriel-vasile/mimetype v1.4.12
go: downloading github.com/go-playground/universal-translator v0.18.1
go: downloading github.com/leodido/go-urn v1.4.0
go: downloading golang.org/x/crypto v0.48.0
go: downloading golang.org/x/text v0.34.0
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading github.com/modern-go/reflect2 v1.0.2
go: downloading github.com/go-playground/locales v0.14.1
go: downloading github.com/bytedance/gopkg v0.1.3
go: downloading github.com/cloudwego/base64x v0.1.6
go: downloading golang.org/x/arch v0.22.0
go: downloading github.com/klauspost/cpuid/v2 v2.3.0
go: downloading github.com/bytedance/sonic/loader v0.5.0
go: downloading github.com/twitchyliquid64/golang-asm v0.15.1
go: upgraded go 1.23.12 => 1.25.0
go: added github.com/bytedance/gopkg v0.1.3
go: added github.com/bytedance/sonic v1.15.0
go: added github.com/bytedance/sonic/loader v0.5.0
go: added github.com/cloudwego/base64x v0.1.6
go: added github.com/gabriel-vasile/mimetype v1.4.12
go: added github.com/gin-contrib/sse v1.1.0
go: added github.com/gin-gonic/gin v1.12.0
go: added github.com/go-playground/locales v0.14.1
go: added github.com/go-playground/universal-translator v0.18.1
go: added github.com/go-playground/validator/v10 v10.30.1
go: added github.com/goccy/go-json v0.10.5
go: added github.com/goccy/go-yaml v1.19.2
go: added github.com/json-iterator/go v1.1.12
go: added github.com/klauspost/cpuid/v2 v2.3.0
go: added github.com/leodido/go-urn v1.4.0
go: added github.com/mattn/go-isatty v0.0.20
go: added github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: added github.com/modern-go/reflect2 v1.0.2
go: added github.com/pelletier/go-toml/v2 v2.2.4
go: added github.com/quic-go/qpack v0.6.0
go: added github.com/quic-go/quic-go v0.59.0
go: added github.com/twitchyliquid64/golang-asm v0.15.1
go: added github.com/ugorji/go/codec v1.3.1
go: added go.mongodb.org/mongo-driver/v2 v2.5.0
go: added golang.org/x/arch v0.22.0
go: added golang.org/x/crypto v0.48.0
go: added golang.org/x/net v0.51.0
go: added golang.org/x/sys v0.41.0
go: added golang.org/x/text v0.34.0
go: added google.golang.org/protobuf v1.36.10
/app # 

36、在包含 main.go 的目录中,从命令行运行代码。使用点号参数表示“在当前目录中运行代码”。



/app # go run .




代码运行后,就拥有了一个可以向其发送请求的 HTTP 服务器。

37、Windows 浏览器访问:http://localhost:8080/albums ,响应状态:(失败)net::ERR_EMPTY_RESPONSE。修改 main.go,router.Run(“0.0.0.0:8080”) // 监听所有网卡。显示预先提供给服务的数据。如图13

Windows 浏览器访问:http://localhost:8080/albums


[
    {
        "id": "1",
        "title": "Blue Train",
        "artist": "John Coltrane",
        "price": 56.99
    },
    {
        "id": "2",
        "title": "Jeru",
        "artist": "Gerry Mulligan",
        "price": 17.99
    },
    {
        "id": "3",
        "title": "Sarah Vaughan and Clifford Brown",
        "artist": "Sarah Vaughan",
        "price": 39.99
    }
]

68、生成 GitHub 的 Personal Access Token(个人访问令牌)。
我30 秒手把手教生成 Token,一次搞定,以后再也不用输密码!
一步一步生成 GitHub Token
打开 GitHub 右上角头像 → Settings
左侧最下面 → Developer settings
点击 Personal access tokens → Tokens (classic)
点击右上角 Generate new token → Generate new token (classic)
填写:
Note:填 go-gin-learning(随便写,方便自己记)
Expiration:选 90 days 或者 No expiration
Select scopes:勾选 repo(全勾第一项就行)
拉到最下面 → Generate token
复制生成的一串以 ghp_ 开头的代码(只显示一次,关掉就没了!)如图14

生成 GitHub 的 Personal Access Token(个人访问令牌)

69、决定将代码提交至 GitHub,创建仓库:https://github.com/shuijingwan/go-gin-learning 。在容器里的 /app 目录(vs code 下的终端),直接执行下面 全部命令:

<pre class="wp-block-syntaxhighlighter-code">

/app # git init
/bin/sh: git: not found
/app # apk add git
( 1/13) Installing brotli-libs (1.2.0-r0)
( 2/13) Installing c-ares (1.34.6-r0)
( 3/13) Installing libunistring (1.4.1-r0)
( 4/13) Installing libidn2 (2.3.8-r0)
( 5/13) Installing nghttp2-libs (1.68.0-r0)
( 6/13) Installing nghttp3 (1.13.1-r0)
( 7/13) Installing libpsl (0.21.5-r3)
( 8/13) Installing zstd-libs (1.5.7-r2)
( 9/13) Installing libcurl (8.17.0-r1)
(10/13) Installing libexpat (2.7.5-r0)
(11/13) Installing pcre2 (10.47-r0)
(12/13) Installing git (2.52.0-r0)
(13/13) Installing git-init-template (2.52.0-r0)
Executing busybox-1.37.0-r30.trigger
OK: 23.4 MiB in 32 packages
/app # git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: will change to "main" in Git 3.0. To configure the initial branch name
hint: to use in all of your new repositories, which will suppress this warning,
hint: call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>
hint:
hint: Disable this message with "git config set advice.defaultBranchName false"
Initialized empty Git repository in /app/.git/
/app # echo "# go-gin-learning" >> README.md
/app # cat > .gitignore << 'EOF'
> /bin
> /dist
> /vendor/
> .env
> .env.test
> .idea/
> .vscode/
> .DS_Store
> EOF
/app # git add .
fatal: detected dubious ownership in repository at '/app'
To add an exception for this directory, call:

        git config --global --add safe.directory /app
/app # git config --global --add safe.directory /app
/app # git add .
/app # git commit -m "feat: 初始化Go Gin项目,集成容器开发环境"
Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@e4dccfba01fb.(none)')
/app # git config --global user.name "shuijingwan"
/app # git config --global user.email "shuijingwanwq@163.com"
/app # git commit -m "feat: 初始化Go Gin项目,集成容器开发环境"
[master (root-commit) 023e682] feat: 初始化Go Gin项目,集成容器开发环境
 7 files changed, 188 insertions(+)
 create mode 100644 .devcontainer/devcontainer.json
 create mode 100644 .gitignore
 create mode 100644 README.md
 create mode 100644 docker-compose.yml
 create mode 100644 go.mod
 create mode 100644 go.sum
 create mode 100644 main.go
/app # git branch -M main
/app # git remote add origin https://github.com/shuijingwan/go-gin-learning.git
/app # git push -u origin main
Username for 'https://github.com': shuijingwan
Password for 'https://shuijingwan@github.com': 
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 4 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (10/10), 5.21 KiB | 313.00 KiB/s, done.
Total 10 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/shuijingwan/go-gin-learning.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.
/app # 
</pre>

70、查看 GitHub 上的仓库目录,发现 .devcontainer 被提交了。现在仓库目录结构如下

/go-gin-learning
├── .devcontainer/ ✅ 应该提交
│ └── devcontainer.json
├── .gitignore ✅ 应该提交
├── README.md ✅ 应该提交
├── docker-compose.yml ✅ 应该提交
├── go.mod
├── go.sum
└── main.go

]]>
https://www.shuijingwanwq.com/2026/04/03/9416/feed/ 0
在 TortoiseGit 中拉取时,报错:error: some local refs could not be updated; try running ‘git remote prune origin’ to remove any old, conflicting branches https://www.shuijingwanwq.com/2024/05/17/8586/ https://www.shuijingwanwq.com/2024/05/17/8586/#respond Fri, 17 May 2024 08:42:46 +0000 https://www.shuijingwanwq.com/?p=8586 浏览量: 144 1、在 TortoiseGit 中拉取时,报错:error: some local refs could not be updated; try running ‘git remote prune origin’ to remove any old, conflicting branches。如图1
在 TortoiseGit 中拉取时,报错:error: some local refs could not be updated; try running 'git remote prune origin' to remove any old, conflicting branches。

图1



git.exe pull --progress -v --no-rebase "origin"
POST git-upload-pack (165 bytes)
From https://git.xxx.com/object/frontend
= [up to date]          develop                 -> origin/develop
= [up to date]          0.22.0-hotfix           -> origin/0.22.0-hotfix
= [up to date]          antd5                   -> origin/antd5
= [up to date]          hotfix/outbound-order   -> origin/hotfix/outbound-order
= [up to date]          master                  -> origin/master
= [up to date]          od/feat/batch-merge-order -> origin/od/feat/batch-merge-order
= [up to date]          od/feat/count           -> origin/od/feat/count
= [up to date]          od/feat/dispute         -> origin/od/feat/dispute
= [up to date]          od/feat/download-order  -> origin/od/feat/download-order
= [up to date]          od/feat/merge-order-optimize -> origin/od/feat/merge-order-optimize
= [up to date]          od/feat/return          -> origin/od/feat/return
= [up to date]          od/feat/status          -> origin/od/feat/status
= [up to date]          od/feat/warehouse-matching -> origin/od/feat/warehouse-matching
= [up to date]          opt/virtual-table       -> origin/opt/virtual-table
= [up to date]          pdc/feat/add-sort-field -> origin/pdc/feat/add-sort-field
= [up to date]          pdc/feat/image-center   -> origin/pdc/feat/image-center
= [up to date]          pdc/feat/sku-form       -> origin/pdc/feat/sku-form
= [up to date]          pdc/feat/spu-export     -> origin/pdc/feat/spu-export
= [up to date]          pdc/feat/track          -> origin/pdc/feat/track
= [up to date]          sc/1688-opt-test        -> origin/sc/1688-opt-test
= [up to date]          sc/appendix-upload      -> origin/sc/appendix-upload
= [up to date]          sc/feat/purchase-order-ui -> origin/sc/feat/purchase-order-ui
error: cannot lock ref 'refs/remotes/origin/sc/fix/to-be-merged-table-scroller': 'refs/remotes/origin/sc/fix' exists; cannot create 'refs/remotes/origin/sc/fix/to-be-merged-table-scroller'
! [new branch]          sc/fix/to-be-merged-table-scroller -> origin/sc/fix/to-be-merged-table-scroller  (unable to update local ref)
= [up to date]          sc/fixs                 -> origin/sc/fixs
= [up to date]          sc/manual-marking       -> origin/sc/manual-marking
= [up to date]          sc/old-out-of-stock     -> origin/sc/old-out-of-stock
= [up to date]          sc/purchase-list-opt    -> origin/sc/purchase-list-opt
= [up to date]          stage                   -> origin/stage
= [up to date]          test                    -> origin/test
= [up to date]          wh/feat/all-order-export -> origin/wh/feat/all-order-export
= [up to date]          wh/feat/deactivated-warehouse -> origin/wh/feat/deactivated-warehouse
= [up to date]          wh/feat/delivery        -> origin/wh/feat/delivery
= [up to date]          wh/feat/examine         -> origin/wh/feat/examine
= [up to date]          wh/feat/hot-outbound    -> origin/wh/feat/hot-outbound
= [up to date]          wh/feat/in-order        -> origin/wh/feat/in-order
= [up to date]          wh/feat/in-outbound-order-batch-add-custom-sku -> origin/wh/feat/in-outbound-order-batch-add-custom-sku
= [up to date]          wh/feat/modify-position-sku-custom-code -> origin/wh/feat/modify-position-sku-custom-code
= [up to date]          wh/feat/multi-position  -> origin/wh/feat/multi-position
= [up to date]          wh/feat/opt-log         -> origin/wh/feat/opt-log
= [up to date]          wh/feat/order-batch_no  -> origin/wh/feat/order-batch_no
= [up to date]          wh/feat/outbound-order-api -> origin/wh/feat/outbound-order-api
= [up to date]          wh/feat/quick-multi-class-outbound -> origin/wh/feat/quick-multi-class-outbound
= [up to date]          wh/feat/quick-outbound  -> origin/wh/feat/quick-outbound
= [up to date]          wh/feat/quick-single-deliver -> origin/wh/feat/quick-single-deliver
= [up to date]          wh/feat/storage-in-log-export -> origin/wh/feat/storage-in-log-export
= [up to date]          wh/feat/transfer-export -> origin/wh/feat/transfer-export
= [up to date]          wh/feat/transfer-import -> origin/wh/feat/transfer-import
= [up to date]          wh/feat/warehouse-order -> origin/wh/feat/warehouse-order
= [up to date]          wh/fix/custom-text-table -> origin/wh/fix/custom-text-table
= [up to date]          wh/fix/order-selected-keys -> origin/wh/fix/order-selected-keys
error: some local refs could not be updated; try running
'git remote prune origin' to remove any old, conflicting branches


git 未能顺利结束 (退出码 1) (5328 ms @ 2024/04/30 10:09:10)



2、仔细查看提示信息,发现存在:error: cannot lock ref ‘refs/remotes/origin/sc/fix/to-be-merged-table-scroller’: ‘refs/remotes/origin/sc/fix’ exists; cannot create ‘refs/remotes/origin/sc/fix/to-be-merged-table-scroller’ 。如图2
仔细查看提示信息,发现存在:error: cannot lock ref 'refs/remotes/origin/sc/fix/to-be-merged-table-scroller': 'refs/remotes/origin/sc/fix' exists; cannot create 'refs/remotes/origin/sc/fix/to-be-merged-table-scroller'

图2

3、参考:在 TortoiseGit 中拉取时,报错:error: cannot lock ref ‘refs/remotes/origin/sc/fix’: ‘refs/remotes/origin/sc/fix/to-be-merge-order’ exists; cannot create ‘refs/remotes/origin/sc/fix’ https://www.shuijingwanwq.com/2024/03/30/8496/ 。得以解决。 4、在 Git Bash 中执行命令:git update-ref -d refs/remotes/origin/sc/fix/to-be-merged-table-scroller。


Lenovo@DESKTOP-QLPK8QM MINGW64 /e/wwwroot/object (develop)
$ git update-ref -d refs/remotes/origin/sc/fix/to-be-merged-table-scroller
error: cannot lock ref 'refs/remotes/origin/sc/fix/to-be-merged-table-scroller': 'refs/remotes/origin/sc/fix' exists; cannot create 'refs/remotes/origin/sc/fix/to-be-merged-table-scroller'
Lenovo@DESKTOP-QLPK8QM MINGW64 /e/wwwroot/object (develop)
$ git update-ref -d refs/remotes/origin/sc/fix



5、再次在 TortoiseGit 中拉取,不再报错,拉取成功]]>
https://www.shuijingwanwq.com/2024/05/17/8586/feed/ 0
在 TortoiseGit 中拉取时,报错:error: cannot lock ref ‘refs/remotes/origin/sc/fix’: ‘refs/remotes/origin/sc/fix/to-be-merge-order’ exists; cannot create ‘refs/remotes/origin/sc/fix’ https://www.shuijingwanwq.com/2024/03/30/8496/ https://www.shuijingwanwq.com/2024/03/30/8496/#respond Sat, 30 Mar 2024 02:38:26 +0000 https://www.shuijingwanwq.com/?p=8496 浏览量: 93 1、在 TortoiseGit 中拉取时,报错:error: cannot lock ref ‘refs/remotes/origin/sc/fix’: ‘refs/remotes/origin/sc/fix/to-be-merge-order’ exists; cannot create ‘refs/remotes/origin/sc/fix’。如图1
在 TortoiseGit 中拉取时,报错:error: cannot lock ref 'refs/remotes/origin/sc/fix': 'refs/remotes/origin/sc/fix/to-be-merge-order' exists; cannot create 'refs/remotes/origin/sc/fix'

图1

2、参考:error: cannot lock ref.. ‘refs/tags’ exists; cannot create ‘refs/tags/  。 3、在 Git Bash 中执行命令:git update-ref -d refs/remotes/origin/sc/fix/to-be-merge-order。如图2
在 Git Bash 中执行命令:git update-ref -d refs/remotes/origin/sc/fix/to-be-merge-order

图2



Lenovo@DESKTOP-QLPK8QM MINGW64 /e/wwwroot/xxx-frontend (develop)
$ git update-ref -d refs/remotes/origin/sc/fix/to-be-merge-order


4、再次在 TortoiseGit 中拉取,不再报错,拉取成功。如图3
再次在 TortoiseGit 中拉取,不再报错,拉取成功

图3

]]>
https://www.shuijingwanwq.com/2024/03/30/8496/feed/ 0
在 WSL2 中的 Ubuntu-20.04 中安装 Shopify CLI 3.0(基于 Node.js),提前检查相应的要求是否满足 https://www.shuijingwanwq.com/2023/06/27/7783/ https://www.shuijingwanwq.com/2023/06/27/7783/#comments Tue, 27 Jun 2023 01:51:43 +0000 https://www.shuijingwanwq.com/?p=7783 浏览量: 242 1、参考:在 Windows 10 专业版中安装 Shopify CLI 3.0(基于 Node.js),提前检查相应的要求是否满足 。 2、参考:在 Linux 中的要求如下


Node.js 16 or higher
Ruby 3.0
Ruby development environment (ruby-dev / ruby-devel)
Git
cURL
GCC
g++
Make


3、Node.js 未安装,参考:安装 。安装失败。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ node -v

Command 'node' not found, but can be installed with:

sudo apt install nodejs

wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get install -y nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libc-ares2 libnode64 nodejs-doc
Suggested packages:
npm
The following NEW packages will be installed:
libc-ares2 libnode64 nodejs nodejs-doc
0 upgraded, 4 newly installed, 0 to remove and 93 not upgraded.
Need to get 38.2 kB/6807 kB of archives.
After this operation, 30.7 MB of additional disk space will be used.
Ign:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc-ares2 amd64 1.15.0-1ubuntu0.1
Err:1 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libc-ares2 amd64 1.15.0-1ubuntu0.1
404 Not Found [IP: 185.125.190.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/c/c-ares/libc-ares2_1.15.0-1ubuntu0.1_amd64.deb 404 Not Found [IP: 185.125.190.39 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?


4、执行命令:sudo apt-get update


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ apt-get update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Get:5 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [2192 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2573 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal-updates/main Translation-en [435 kB]
Get:8 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [16.6 kB]
Get:9 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [1882 kB]
Get:10 http://security.ubuntu.com/ubuntu focal-security/main Translation-en [354 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal-updates/restricted Translation-en [264 kB]
Get:12 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 c-n-f Metadata [636 B]
Get:13 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1064 kB]
Get:14 http://security.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [13.0 kB]
Get:15 http://archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [253 kB]
Get:16 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1770 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [24.3 kB]
Get:18 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [25.2 kB]
Get:19 http://archive.ubuntu.com/ubuntu focal-updates/multiverse Translation-en [7408 B]
Get:20 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 c-n-f Metadata [612 B]
Get:21 http://security.ubuntu.com/ubuntu focal-security/restricted Translation-en [249 kB]
Get:22 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [45.7 kB]
Get:23 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 c-n-f Metadata [640 B]
Get:24 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [839 kB]
Get:25 http://archive.ubuntu.com/ubuntu focal-backports/main Translation-en [16.3 kB]
Get:26 http://security.ubuntu.com/ubuntu focal-security/universe Translation-en [173 kB]
Get:27 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 c-n-f Metadata [1420 B]
Get:28 http://security.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [17.8 kB]
Get:29 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [25.0 kB]
Get:30 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [22.9 kB]
Get:31 http://archive.ubuntu.com/ubuntu focal-backports/universe Translation-en [16.3 kB]
Get:32 http://security.ubuntu.com/ubuntu focal-security/multiverse Translation-en [5488 B]
Get:33 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [880 B]
Get:34 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 c-n-f Metadata [540 B]
Fetched 12.6 MB in 21s (595 kB/s)
Reading package lists... Done


5、再次执行命令: sudo apt-get install -y nodejs,安装 成功。Node.js 的版本是:v10.19.0,低于 16。不符合要求。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get install -y nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libc-ares2 libnode64 nodejs-doc
Suggested packages:
npm
The following NEW packages will be installed:
libc-ares2 libnode64 nodejs nodejs-doc
0 upgraded, 4 newly installed, 0 to remove and 248 not upgraded.
Need to get 36.7 kB/6805 kB of archives.
After this operation, 30.7 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc-ares2 amd64 1.15.0-1ubuntu0.2 [36.7 kB]
Fetched 36.7 kB in 2s (21.7 kB/s)
Selecting previously unselected package libc-ares2:amd64.
(Reading database ... 32378 files and directories currently installed.)
Preparing to unpack .../libc-ares2_1.15.0-1ubuntu0.2_amd64.deb ...
Unpacking libc-ares2:amd64 (1.15.0-1ubuntu0.2) ...
Selecting previously unselected package libnode64:amd64.
Preparing to unpack .../libnode64_10.19.0~dfsg-3ubuntu1_amd64.deb ...
Unpacking libnode64:amd64 (10.19.0~dfsg-3ubuntu1) ...
Selecting previously unselected package nodejs-doc.
Preparing to unpack .../nodejs-doc_10.19.0~dfsg-3ubuntu1_all.deb ...
Unpacking nodejs-doc (10.19.0~dfsg-3ubuntu1) ...
Selecting previously unselected package nodejs.
Preparing to unpack .../nodejs_10.19.0~dfsg-3ubuntu1_amd64.deb ...
Unpacking nodejs (10.19.0~dfsg-3ubuntu1) ...
Setting up libc-ares2:amd64 (1.15.0-1ubuntu0.2) ...
Setting up libnode64:amd64 (10.19.0~dfsg-3ubuntu1) ...
Setting up nodejs-doc (10.19.0~dfsg-3ubuntu1) ...
Setting up nodejs (10.19.0~dfsg-3ubuntu1) ...
update-alternatives: using /usr/bin/nodejs to provide /usr/bin/js (js) in auto mode
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

Processing triggers for man-db (2.9.1-1) ...
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ node -v
v10.19.0
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$


6、参考:更新至 Node.js v18.x。Node.js 的版本是:v18.16.0,高于 16。符合要求。如图1
更新至 Node.js v18.x。Node.js 的版本是:v18.16.0,高于 16。符合要求

图1



wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &amp;&amp;\
&gt; sudo apt-get install -y nodejs

## Installing the NodeSource Node.js 18.x repo...

## Populating apt-get cache...

+ apt-get update
Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Hit:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Reading package lists... Done

## Confirming "focal" is supported...

+ curl -sLf -o /dev/null 'https://deb.nodesource.com/node_18.x/dists/focal/Release'

## Adding the NodeSource signing key to your keyring...

+ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | tee /usr/share/keyrings/nodesource.gpg &gt;/dev/null

## Creating apt sources list file for the NodeSource Node.js 18.x repo...

+ echo 'deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x focal main' &gt; /etc/apt/sources.list.d/nodesource.list
+ echo 'deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x focal main' &gt;&gt; /etc/apt/sources.list.d/nodesource.list

## Running `apt-get update` for you...

+ apt-get update
Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Hit:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Get:5 https://deb.nodesource.com/node_18.x focal InRelease [4583 B]
Get:6 https://deb.nodesource.com/node_18.x focal/main amd64 Packages [776 B]
Fetched 5359 B in 4s (1459 B/s)
Reading package lists... Done

## Run `sudo apt-get install -y nodejs` to install Node.js 18.x and npm
## You may also need development tools to build native addons:
sudo apt-get install gcc g++ make
## To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg &gt;/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update &amp;&amp; sudo apt-get install yarn

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libc-ares2
Use 'sudo apt autoremove' to remove it.
The following packages will be REMOVED:
libnode64 nodejs-doc
The following packages will be upgraded:
nodejs
1 upgraded, 0 newly installed, 2 to remove and 248 not upgraded.
Need to get 28.7 MB of archives.
After this operation, 156 MB of additional disk space will be used.
Get:1 https://deb.nodesource.com/node_18.x focal/main amd64 nodejs amd64 18.16.0-deb-1nodesource1 [28.7 MB]
Fetched 28.7 MB in 8s (3816 kB/s)
(Reading database ... 32510 files and directories currently installed.)
Removing nodejs-doc (10.19.0~dfsg-3ubuntu1) ...
dpkg: libnode64:amd64: dependency problems, but removing anyway as you requested:
nodejs depends on libnode64 (= 10.19.0~dfsg-3ubuntu1).

Removing libnode64:amd64 (10.19.0~dfsg-3ubuntu1) ...
(Reading database ... 32393 files and directories currently installed.)
Preparing to unpack .../nodejs_18.16.0-deb-1nodesource1_amd64.deb ...
Unpacking nodejs (18.16.0-deb-1nodesource1) over (10.19.0~dfsg-3ubuntu1) ...
Setting up nodejs (18.16.0-deb-1nodesource1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

Processing triggers for man-db (2.9.1-1) ...
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ node -v
v18.16.0
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$


7、Ruby 未安装,安装后的版本是:ruby 2.7.0p0,低于 3.0,不符合要求。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get install ruby-full
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libc-ares2
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
fonts-lato javascript-common libgmp-dev libgmp10 libgmpxx4ldbl libjs-jquery libruby2.7 rake ri ruby ruby-dev
ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc ruby2.7 ruby2.7-dev ruby2.7-doc
rubygems-integration unzip zip
Suggested packages:
apache2 | lighttpd | httpd gmp-doc libgmp10-doc libmpfr-dev bundler
The following NEW packages will be installed:
fonts-lato javascript-common libgmp-dev libgmpxx4ldbl libjs-jquery libruby2.7 rake ri ruby ruby-dev ruby-full
ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc ruby2.7 ruby2.7-dev ruby2.7-doc
rubygems-integration unzip zip
The following packages will be upgraded:
libgmp10
1 upgraded, 22 newly installed, 0 to remove and 247 not upgraded.
Need to get 10.2 MB of archives.
After this operation, 58.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 fonts-lato all 2.0-2 [2698 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgmp10 amd64 2:6.2.0+dfsg-4ubuntu0.1 [241 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal/main amd64 javascript-common all 11 [6066 B]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgmpxx4ldbl amd64 2:6.2.0+dfsg-4ubuntu0.1 [9144 B]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgmp-dev amd64 2:6.2.0+dfsg-4ubuntu0.1 [320 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal/main amd64 libjs-jquery all 3.3.1~dfsg-3 [329 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal/main amd64 rubygems-integration all 1.16 [5092 B]
Get:8 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 ruby2.7 amd64 2.7.0-5ubuntu1.11 [95.6 kB]
Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby amd64 1:2.7+1 [5412 B]
Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 rake all 13.0.1-4 [61.6 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby-minitest all 5.13.0-1 [40.9 kB]
Get:12 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby-net-telnet all 0.1.1-2 [12.6 kB]
Get:13 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby-power-assert all 1.1.7-1 [11.4 kB]
Get:14 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby-test-unit all 3.3.5-1 [73.2 kB]
Get:15 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby-xmlrpc all 0.3.0-2 [23.8 kB]
Get:16 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libruby2.7 amd64 2.7.0-5ubuntu1.11 [3533 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 ruby2.7-doc all 2.7.0-5ubuntu1.11 [2160 kB]
Get:18 http://archive.ubuntu.com/ubuntu focal/universe amd64 ri all 1:2.7+1 [4520 B]
Get:19 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 ruby2.7-dev amd64 2.7.0-5ubuntu1.11 [182 kB]
Get:20 http://archive.ubuntu.com/ubuntu focal/main amd64 ruby-dev amd64 1:2.7+1 [4632 B]
Get:21 http://archive.ubuntu.com/ubuntu focal/universe amd64 ruby-full all 1:2.7+1 [2728 B]
Get:22 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 unzip amd64 6.0-25ubuntu1.1 [168 kB]
Get:23 http://archive.ubuntu.com/ubuntu focal/main amd64 zip amd64 3.0-11build1 [167 kB]
Fetched 10.2 MB in 16s (643 kB/s)
Selecting previously unselected package fonts-lato.
(Reading database ... 37931 files and directories currently installed.)
Preparing to unpack .../fonts-lato_2.0-2_all.deb ...
Unpacking fonts-lato (2.0-2) ...
Preparing to unpack .../libgmp10_2%3a6.2.0+dfsg-4ubuntu0.1_amd64.deb ...
Unpacking libgmp10:amd64 (2:6.2.0+dfsg-4ubuntu0.1) over (2:6.2.0+dfsg-4) ...
Setting up libgmp10:amd64 (2:6.2.0+dfsg-4ubuntu0.1) ...
Selecting previously unselected package javascript-common.
(Reading database ... 37954 files and directories currently installed.)
Preparing to unpack .../00-javascript-common_11_all.deb ...
Unpacking javascript-common (11) ...
Selecting previously unselected package libgmpxx4ldbl:amd64.
Preparing to unpack .../01-libgmpxx4ldbl_2%3a6.2.0+dfsg-4ubuntu0.1_amd64.deb ...
Unpacking libgmpxx4ldbl:amd64 (2:6.2.0+dfsg-4ubuntu0.1) ...
Selecting previously unselected package libgmp-dev:amd64.
Preparing to unpack .../02-libgmp-dev_2%3a6.2.0+dfsg-4ubuntu0.1_amd64.deb ...
Unpacking libgmp-dev:amd64 (2:6.2.0+dfsg-4ubuntu0.1) ...
Selecting previously unselected package libjs-jquery.
Preparing to unpack .../03-libjs-jquery_3.3.1~dfsg-3_all.deb ...
Unpacking libjs-jquery (3.3.1~dfsg-3) ...
Selecting previously unselected package rubygems-integration.
Preparing to unpack .../04-rubygems-integration_1.16_all.deb ...
Unpacking rubygems-integration (1.16) ...
Selecting previously unselected package ruby2.7.
Preparing to unpack .../05-ruby2.7_2.7.0-5ubuntu1.11_amd64.deb ...
Unpacking ruby2.7 (2.7.0-5ubuntu1.11) ...
Selecting previously unselected package ruby.
Preparing to unpack .../06-ruby_1%3a2.7+1_amd64.deb ...
Unpacking ruby (1:2.7+1) ...
Selecting previously unselected package rake.
Preparing to unpack .../07-rake_13.0.1-4_all.deb ...
Unpacking rake (13.0.1-4) ...
Selecting previously unselected package ruby-minitest.
Preparing to unpack .../08-ruby-minitest_5.13.0-1_all.deb ...
Unpacking ruby-minitest (5.13.0-1) ...
Selecting previously unselected package ruby-net-telnet.
Preparing to unpack .../09-ruby-net-telnet_0.1.1-2_all.deb ...
Unpacking ruby-net-telnet (0.1.1-2) ...
Selecting previously unselected package ruby-power-assert.
Preparing to unpack .../10-ruby-power-assert_1.1.7-1_all.deb ...
Unpacking ruby-power-assert (1.1.7-1) ...
Selecting previously unselected package ruby-test-unit.
Preparing to unpack .../11-ruby-test-unit_3.3.5-1_all.deb ...
Unpacking ruby-test-unit (3.3.5-1) ...
Selecting previously unselected package ruby-xmlrpc.
Preparing to unpack .../12-ruby-xmlrpc_0.3.0-2_all.deb ...
Unpacking ruby-xmlrpc (0.3.0-2) ...
Selecting previously unselected package libruby2.7:amd64.
Preparing to unpack .../13-libruby2.7_2.7.0-5ubuntu1.11_amd64.deb ...
Unpacking libruby2.7:amd64 (2.7.0-5ubuntu1.11) ...
Selecting previously unselected package ruby2.7-doc.
Preparing to unpack .../14-ruby2.7-doc_2.7.0-5ubuntu1.11_all.deb ...
Unpacking ruby2.7-doc (2.7.0-5ubuntu1.11) ...
Selecting previously unselected package ri.
Preparing to unpack .../15-ri_1%3a2.7+1_all.deb ...
Unpacking ri (1:2.7+1) ...
Selecting previously unselected package ruby2.7-dev:amd64.
Preparing to unpack .../16-ruby2.7-dev_2.7.0-5ubuntu1.11_amd64.deb ...
Unpacking ruby2.7-dev:amd64 (2.7.0-5ubuntu1.11) ...
Selecting previously unselected package ruby-dev:amd64.
Preparing to unpack .../17-ruby-dev_1%3a2.7+1_amd64.deb ...
Unpacking ruby-dev:amd64 (1:2.7+1) ...
Selecting previously unselected package ruby-full.
Preparing to unpack .../18-ruby-full_1%3a2.7+1_all.deb ...
Unpacking ruby-full (1:2.7+1) ...
Selecting previously unselected package unzip.
Preparing to unpack .../19-unzip_6.0-25ubuntu1.1_amd64.deb ...
Unpacking unzip (6.0-25ubuntu1.1) ...
Selecting previously unselected package zip.
Preparing to unpack .../20-zip_3.0-11build1_amd64.deb ...
Unpacking zip (3.0-11build1) ...
Setting up javascript-common (11) ...
Setting up fonts-lato (2.0-2) ...
Setting up ruby-power-assert (1.1.7-1) ...
Setting up unzip (6.0-25ubuntu1.1) ...
Setting up rubygems-integration (1.16) ...
Setting up ruby-minitest (5.13.0-1) ...
Setting up zip (3.0-11build1) ...
Setting up libgmpxx4ldbl:amd64 (2:6.2.0+dfsg-4ubuntu0.1) ...
Setting up ruby-test-unit (3.3.5-1) ...
Setting up ruby-net-telnet (0.1.1-2) ...
Setting up ruby2.7-doc (2.7.0-5ubuntu1.11) ...
Setting up libjs-jquery (3.3.1~dfsg-3) ...
Setting up ruby-xmlrpc (0.3.0-2) ...
Setting up libgmp-dev:amd64 (2:6.2.0+dfsg-4ubuntu0.1) ...
Setting up ruby2.7 (2.7.0-5ubuntu1.11) ...
Setting up ri (1:2.7+1) ...
Setting up ruby (1:2.7+1) ...
Setting up rake (13.0.1-4) ...
Setting up libruby2.7:amd64 (2.7.0-5ubuntu1.11) ...
Setting up ruby2.7-dev:amd64 (2.7.0-5ubuntu1.11) ...
Setting up ruby-dev:amd64 (1:2.7+1) ...
Setting up ruby-full (1:2.7+1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

Processing triggers for man-db (2.9.1-1) ...
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$


8、包管理器中的 Ruby 版本通常都不是最新的。决定基于安装工具 ruby-build 安装 3.0 版本。ruby-build 会尽力下载并编译想要的 Ruby 版本,但有时会因为未满足系统依赖而导致编译失败,或者编译成功但新的 Ruby 版本在运行时出现奇怪的错误。 准备对合理构建环境的建议。参考:构建 。然后再安装 ruby-build。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get install autoconf patch build-essential rustc libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libgmp-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev uuid-dev
[sudo] password for wangqiang:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'libreadline-dev' instead of 'libreadline6-dev'
libgdbm6 is already the newest version (1.18.1-5).
libgdbm6 set to manually installed.
patch is already the newest version (2.7.6-6).
patch set to manually installed.
libgmp-dev is already the newest version (2:6.2.0+dfsg-4ubuntu0.1).
libgmp-dev set to manually installed.
The following package was automatically installed and is no longer required:
libc-ares2
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
automake autotools-dev binutils binutils-common binutils-x86-64-linux-gnu cpp cpp-9 dpkg-dev fakeroot g++ g++-9 gcc
gcc-9 gcc-9-base libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1
libbinutils libc-dev-bin libc6 libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdb5.3-dev libdpkg-perl
libfakeroot libfile-fcntllock-perl libgcc-9-dev libgomp1 libisl22 libitm1 liblsan0 libmpc3 libncurses-dev
libncurses6 libncursesw6 libquadmath0 libssl1.1 libstd-rust-1.65 libstd-rust-dev libstdc++-9-dev libtinfo6 libtsan0
libubsan1 libuuid1 linux-libc-dev m4 manpages-dev zlib1g
Suggested packages:
autoconf-archive gnu-standards autoconf-doc libtool gettext binutils-doc cpp-doc gcc-9-locales debian-keyring
g++-multilib g++-9-multilib gcc-9-doc gcc-multilib flex bison gdb gcc-doc gcc-9-multilib glibc-doc db5.3-doc bzr
ncurses-doc readline-doc libssl-doc libstdc++-9-doc libyaml-doc m4-doc cargo llvm-14 lld-14 clang-14
The following NEW packages will be installed:
autoconf automake autotools-dev binutils binutils-common binutils-x86-64-linux-gnu build-essential cpp cpp-9
dpkg-dev fakeroot g++ g++-9 gcc gcc-9 gcc-9-base libalgorithm-diff-perl libalgorithm-diff-xs-perl
libalgorithm-merge-perl libasan5 libatomic1 libbinutils libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0
libctf0 libdb-dev libdb5.3-dev libdpkg-perl libfakeroot libffi-dev libfile-fcntllock-perl libgcc-9-dev libgdbm-dev
libgomp1 libisl22 libitm1 liblsan0 libmpc3 libncurses-dev libncurses5-dev libquadmath0 libreadline-dev libssl-dev
libstd-rust-1.65 libstd-rust-dev libstdc++-9-dev libtsan0 libubsan1 libyaml-dev linux-libc-dev m4 manpages-dev rustc
uuid-dev zlib1g-dev
The following packages will be upgraded:
libc6 libncurses6 libncursesw6 libssl1.1 libtinfo6 libuuid1 zlib1g
7 upgraded, 58 newly installed, 0 to remove and 240 not upgraded.
Need to get 136 MB of archives.
After this operation, 593 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc6 amd64 2.31-0ubuntu9.9 [2722 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libncursesw6 amd64 6.2-0ubuntu2.1 [132 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libncurses6 amd64 6.2-0ubuntu2.1 [101 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libtinfo6 amd64 6.2-0ubuntu2.1 [87.4 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libuuid1 amd64 2.34-0.1ubuntu9.3 [19.9 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 zlib1g amd64 1:1.2.11.dfsg-2ubuntu1.5 [54.2 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2.18 [1322 kB]
Get:8 http://archive.ubuntu.com/ubuntu focal/main amd64 m4 amd64 1.4.18-4 [199 kB]
Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 autoconf all 2.69-11.1 [321 kB]
Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 autotools-dev all 20180224.1 [39.6 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal/main amd64 automake all 1:1.16.1-4ubuntu6 [522 kB]
Get:12 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 binutils-common amd64 2.34-6ubuntu1.5 [207 kB]
Get:13 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libbinutils amd64 2.34-6ubuntu1.5 [475 kB]
Get:14 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libctf-nobfd0 amd64 2.34-6ubuntu1.5 [47.4 kB]
Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libctf0 amd64 2.34-6ubuntu1.5 [46.6 kB]
Get:16 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 binutils-x86-64-linux-gnu amd64 2.34-6ubuntu1.5 [1613 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 binutils amd64 2.34-6ubuntu1.5 [3372 B]
Get:18 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc-dev-bin amd64 2.31-0ubuntu9.9 [71.8 kB]
Get:19 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-libc-dev amd64 5.4.0-149.166 [1117 kB]
Get:20 http://archive.ubuntu.com/ubuntu focal/main amd64 libcrypt-dev amd64 1:4.4.10-10ubuntu4 [104 kB]
Get:21 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc6-dev amd64 2.31-0ubuntu9.9 [2519 kB]
Get:22 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 gcc-9-base amd64 9.4.0-1ubuntu1~20.04.1 [19.4 kB]
Get:23 http://archive.ubuntu.com/ubuntu focal/main amd64 libisl22 amd64 0.22.1-1 [592 kB]
Get:24 http://archive.ubuntu.com/ubuntu focal/main amd64 libmpc3 amd64 1.1.0-1 [40.8 kB]
Get:25 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 cpp-9 amd64 9.4.0-1ubuntu1~20.04.1 [7500 kB]
Get:26 http://archive.ubuntu.com/ubuntu focal/main amd64 cpp amd64 4:9.3.0-1ubuntu2 [27.6 kB]
Get:27 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libcc1-0 amd64 10.3.0-1ubuntu1~20.04 [48.8 kB]
Get:28 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgomp1 amd64 10.3.0-1ubuntu1~20.04 [102 kB]
Get:29 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libitm1 amd64 10.3.0-1ubuntu1~20.04 [26.2 kB]
Get:30 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libatomic1 amd64 10.3.0-1ubuntu1~20.04 [9284 B]
Get:31 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libasan5 amd64 9.4.0-1ubuntu1~20.04.1 [2751 kB]
Get:32 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 liblsan0 amd64 10.3.0-1ubuntu1~20.04 [835 kB]
Get:33 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libtsan0 amd64 10.3.0-1ubuntu1~20.04 [2009 kB]
Get:34 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libubsan1 amd64 10.3.0-1ubuntu1~20.04 [784 kB]
Get:35 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libquadmath0 amd64 10.3.0-1ubuntu1~20.04 [146 kB]
Get:36 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgcc-9-dev amd64 9.4.0-1ubuntu1~20.04.1 [2359 kB]
Get:37 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 gcc-9 amd64 9.4.0-1ubuntu1~20.04.1 [8274 kB]
Get:38 http://archive.ubuntu.com/ubuntu focal/main amd64 gcc amd64 4:9.3.0-1ubuntu2 [5208 B]
Get:39 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libstdc++-9-dev amd64 9.4.0-1ubuntu1~20.04.1 [1722 kB]
Get:40 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 g++-9 amd64 9.4.0-1ubuntu1~20.04.1 [8420 kB]
Get:41 http://archive.ubuntu.com/ubuntu focal/main amd64 g++ amd64 4:9.3.0-1ubuntu2 [1604 B]
Get:42 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libdpkg-perl all 1.19.7ubuntu3.2 [231 kB]
Get:43 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 dpkg-dev all 1.19.7ubuntu3.2 [679 kB]
Get:44 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 build-essential amd64 12.8ubuntu1.1 [4664 B]
Get:45 http://archive.ubuntu.com/ubuntu focal/main amd64 libfakeroot amd64 1.24-1 [25.7 kB]
Get:46 http://archive.ubuntu.com/ubuntu focal/main amd64 fakeroot amd64 1.24-1 [62.6 kB]
Get:47 http://archive.ubuntu.com/ubuntu focal/main amd64 libalgorithm-diff-perl all 1.19.03-2 [46.6 kB]
Get:48 http://archive.ubuntu.com/ubuntu focal/main amd64 libalgorithm-diff-xs-perl amd64 0.04-6 [11.3 kB]
Get:49 http://archive.ubuntu.com/ubuntu focal/main amd64 libalgorithm-merge-perl all 0.08-3 [12.0 kB]
Get:50 http://archive.ubuntu.com/ubuntu focal/main amd64 libfile-fcntllock-perl amd64 0.22-3build4 [33.1 kB]
Get:51 http://archive.ubuntu.com/ubuntu focal/main amd64 libgdbm-dev amd64 1.18.1-5 [83.4 kB]
Get:52 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libncurses-dev amd64 6.2-0ubuntu2.1 [340 kB]
Get:53 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libncurses5-dev amd64 6.2-0ubuntu2.1 [984 B]
Get:54 http://archive.ubuntu.com/ubuntu focal/main amd64 libreadline-dev amd64 8.0-4 [141 kB]
Get:55 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libssl-dev amd64 1.1.1f-1ubuntu2.18 [1586 kB]
Get:56 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 libstd-rust-1.65 amd64 1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04 [41.8 MB]
Get:57 http://archive.ubuntu.com/ubuntu focal/main amd64 manpages-dev all 5.05-1 [2266 kB]
Get:58 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 zlib1g-dev amd64 1:1.2.11.dfsg-2ubuntu1.5 [155 kB]
Get:59 http://archive.ubuntu.com/ubuntu focal/main amd64 libdb5.3-dev amd64 5.3.28+dfsg1-0.6ubuntu2 [766 kB]
Get:60 http://archive.ubuntu.com/ubuntu focal/main amd64 libdb-dev amd64 1:5.3.21~exp1ubuntu2 [2294 B]
Get:61 http://archive.ubuntu.com/ubuntu focal/main amd64 libffi-dev amd64 3.3-4 [57.0 kB]
Get:62 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 libstd-rust-dev amd64 1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04 [36.8 MB]
Get:63 http://archive.ubuntu.com/ubuntu focal/main amd64 libyaml-dev amd64 0.2.2-1 [58.2 kB]
Get:64 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 rustc amd64 1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04 [2967 kB]
Get:65 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 uuid-dev amd64 2.34-0.1ubuntu9.3 [33.6 kB]
Fetched 136 MB in 2min 1s (1124 kB/s)
Extracting templates from packages: 100%
Preconfiguring packages ...
(Reading database ... 58487 files and directories currently installed.)
Preparing to unpack .../libc6_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc6:amd64 (2.31-0ubuntu9.9) over (2.31-0ubuntu9.2) ...
Setting up libc6:amd64 (2.31-0ubuntu9.9) ...
(Reading database ... 58487 files and directories currently installed.)
Preparing to unpack .../libncursesw6_6.2-0ubuntu2.1_amd64.deb ...
Unpacking libncursesw6:amd64 (6.2-0ubuntu2.1) over (6.2-0ubuntu2) ...
Preparing to unpack .../libncurses6_6.2-0ubuntu2.1_amd64.deb ...
Unpacking libncurses6:amd64 (6.2-0ubuntu2.1) over (6.2-0ubuntu2) ...
Preparing to unpack .../libtinfo6_6.2-0ubuntu2.1_amd64.deb ...
Unpacking libtinfo6:amd64 (6.2-0ubuntu2.1) over (6.2-0ubuntu2) ...
Setting up libtinfo6:amd64 (6.2-0ubuntu2.1) ...
(Reading database ... 58487 files and directories currently installed.)
Preparing to unpack .../libuuid1_2.34-0.1ubuntu9.3_amd64.deb ...
Unpacking libuuid1:amd64 (2.34-0.1ubuntu9.3) over (2.34-0.1ubuntu9.1) ...
Setting up libuuid1:amd64 (2.34-0.1ubuntu9.3) ...
(Reading database ... 58487 files and directories currently installed.)
Preparing to unpack .../zlib1g_1%3a1.2.11.dfsg-2ubuntu1.5_amd64.deb ...
Unpacking zlib1g:amd64 (1:1.2.11.dfsg-2ubuntu1.5) over (1:1.2.11.dfsg-2ubuntu1.2) ...
Setting up zlib1g:amd64 (1:1.2.11.dfsg-2ubuntu1.5) ...
(Reading database ... 58487 files and directories currently installed.)
Preparing to unpack .../00-libssl1.1_1.1.1f-1ubuntu2.18_amd64.deb ...
Unpacking libssl1.1:amd64 (1.1.1f-1ubuntu2.18) over (1.1.1f-1ubuntu2.5) ...
Selecting previously unselected package m4.
Preparing to unpack .../01-m4_1.4.18-4_amd64.deb ...
Unpacking m4 (1.4.18-4) ...
Selecting previously unselected package autoconf.
Preparing to unpack .../02-autoconf_2.69-11.1_all.deb ...
Unpacking autoconf (2.69-11.1) ...
Selecting previously unselected package autotools-dev.
Preparing to unpack .../03-autotools-dev_20180224.1_all.deb ...
Unpacking autotools-dev (20180224.1) ...
Selecting previously unselected package automake.
Preparing to unpack .../04-automake_1%3a1.16.1-4ubuntu6_all.deb ...
Unpacking automake (1:1.16.1-4ubuntu6) ...
Selecting previously unselected package binutils-common:amd64.
Preparing to unpack .../05-binutils-common_2.34-6ubuntu1.5_amd64.deb ...
Unpacking binutils-common:amd64 (2.34-6ubuntu1.5) ...
Selecting previously unselected package libbinutils:amd64.
Preparing to unpack .../06-libbinutils_2.34-6ubuntu1.5_amd64.deb ...
Unpacking libbinutils:amd64 (2.34-6ubuntu1.5) ...
Selecting previously unselected package libctf-nobfd0:amd64.
Preparing to unpack .../07-libctf-nobfd0_2.34-6ubuntu1.5_amd64.deb ...
Unpacking libctf-nobfd0:amd64 (2.34-6ubuntu1.5) ...
Selecting previously unselected package libctf0:amd64.
Preparing to unpack .../08-libctf0_2.34-6ubuntu1.5_amd64.deb ...
Unpacking libctf0:amd64 (2.34-6ubuntu1.5) ...
Selecting previously unselected package binutils-x86-64-linux-gnu.
Preparing to unpack .../09-binutils-x86-64-linux-gnu_2.34-6ubuntu1.5_amd64.deb ...
Unpacking binutils-x86-64-linux-gnu (2.34-6ubuntu1.5) ...
Selecting previously unselected package binutils.
Preparing to unpack .../10-binutils_2.34-6ubuntu1.5_amd64.deb ...
Unpacking binutils (2.34-6ubuntu1.5) ...
Selecting previously unselected package libc-dev-bin.
Preparing to unpack .../11-libc-dev-bin_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc-dev-bin (2.31-0ubuntu9.9) ...
Selecting previously unselected package linux-libc-dev:amd64.
Preparing to unpack .../12-linux-libc-dev_5.4.0-149.166_amd64.deb ...
Unpacking linux-libc-dev:amd64 (5.4.0-149.166) ...
Selecting previously unselected package libcrypt-dev:amd64.
Preparing to unpack .../13-libcrypt-dev_1%3a4.4.10-10ubuntu4_amd64.deb ...
Unpacking libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...
Selecting previously unselected package libc6-dev:amd64.
Preparing to unpack .../14-libc6-dev_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc6-dev:amd64 (2.31-0ubuntu9.9) ...
Selecting previously unselected package gcc-9-base:amd64.
Preparing to unpack .../15-gcc-9-base_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking gcc-9-base:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package libisl22:amd64.
Preparing to unpack .../16-libisl22_0.22.1-1_amd64.deb ...
Unpacking libisl22:amd64 (0.22.1-1) ...
Selecting previously unselected package libmpc3:amd64.
Preparing to unpack .../17-libmpc3_1.1.0-1_amd64.deb ...
Unpacking libmpc3:amd64 (1.1.0-1) ...
Selecting previously unselected package cpp-9.
Preparing to unpack .../18-cpp-9_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking cpp-9 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package cpp.
Preparing to unpack .../19-cpp_4%3a9.3.0-1ubuntu2_amd64.deb ...
Unpacking cpp (4:9.3.0-1ubuntu2) ...
Selecting previously unselected package libcc1-0:amd64.
Preparing to unpack .../20-libcc1-0_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libcc1-0:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libgomp1:amd64.
Preparing to unpack .../21-libgomp1_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libgomp1:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libitm1:amd64.
Preparing to unpack .../22-libitm1_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libitm1:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libatomic1:amd64.
Preparing to unpack .../23-libatomic1_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libatomic1:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libasan5:amd64.
Preparing to unpack .../24-libasan5_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking libasan5:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package liblsan0:amd64.
Preparing to unpack .../25-liblsan0_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking liblsan0:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libtsan0:amd64.
Preparing to unpack .../26-libtsan0_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libtsan0:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libubsan1:amd64.
Preparing to unpack .../27-libubsan1_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libubsan1:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libquadmath0:amd64.
Preparing to unpack .../28-libquadmath0_10.3.0-1ubuntu1~20.04_amd64.deb ...
Unpacking libquadmath0:amd64 (10.3.0-1ubuntu1~20.04) ...
Selecting previously unselected package libgcc-9-dev:amd64.
Preparing to unpack .../29-libgcc-9-dev_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking libgcc-9-dev:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package gcc-9.
Preparing to unpack .../30-gcc-9_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking gcc-9 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package gcc.
Preparing to unpack .../31-gcc_4%3a9.3.0-1ubuntu2_amd64.deb ...
Unpacking gcc (4:9.3.0-1ubuntu2) ...
Selecting previously unselected package libstdc++-9-dev:amd64.
Preparing to unpack .../32-libstdc++-9-dev_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking libstdc++-9-dev:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package g++-9.
Preparing to unpack .../33-g++-9_9.4.0-1ubuntu1~20.04.1_amd64.deb ...
Unpacking g++-9 (9.4.0-1ubuntu1~20.04.1) ...
Selecting previously unselected package g++.
Preparing to unpack .../34-g++_4%3a9.3.0-1ubuntu2_amd64.deb ...
Unpacking g++ (4:9.3.0-1ubuntu2) ...
Selecting previously unselected package libdpkg-perl.
Preparing to unpack .../35-libdpkg-perl_1.19.7ubuntu3.2_all.deb ...
Unpacking libdpkg-perl (1.19.7ubuntu3.2) ...
Selecting previously unselected package dpkg-dev.
Preparing to unpack .../36-dpkg-dev_1.19.7ubuntu3.2_all.deb ...
Unpacking dpkg-dev (1.19.7ubuntu3.2) ...
Selecting previously unselected package build-essential.
Preparing to unpack .../37-build-essential_12.8ubuntu1.1_amd64.deb ...
Unpacking build-essential (12.8ubuntu1.1) ...
Selecting previously unselected package libfakeroot:amd64.
Preparing to unpack .../38-libfakeroot_1.24-1_amd64.deb ...
Unpacking libfakeroot:amd64 (1.24-1) ...
Selecting previously unselected package fakeroot.
Preparing to unpack .../39-fakeroot_1.24-1_amd64.deb ...
Unpacking fakeroot (1.24-1) ...
Selecting previously unselected package libalgorithm-diff-perl.
Preparing to unpack .../40-libalgorithm-diff-perl_1.19.03-2_all.deb ...
Unpacking libalgorithm-diff-perl (1.19.03-2) ...
Selecting previously unselected package libalgorithm-diff-xs-perl.
Preparing to unpack .../41-libalgorithm-diff-xs-perl_0.04-6_amd64.deb ...
Unpacking libalgorithm-diff-xs-perl (0.04-6) ...
Selecting previously unselected package libalgorithm-merge-perl.
Preparing to unpack .../42-libalgorithm-merge-perl_0.08-3_all.deb ...
Unpacking libalgorithm-merge-perl (0.08-3) ...
Selecting previously unselected package libfile-fcntllock-perl.
Preparing to unpack .../43-libfile-fcntllock-perl_0.22-3build4_amd64.deb ...
Unpacking libfile-fcntllock-perl (0.22-3build4) ...
Selecting previously unselected package libgdbm-dev:amd64.
Preparing to unpack .../44-libgdbm-dev_1.18.1-5_amd64.deb ...
Unpacking libgdbm-dev:amd64 (1.18.1-5) ...
Selecting previously unselected package libncurses-dev:amd64.
Preparing to unpack .../45-libncurses-dev_6.2-0ubuntu2.1_amd64.deb ...
Unpacking libncurses-dev:amd64 (6.2-0ubuntu2.1) ...
Selecting previously unselected package libncurses5-dev:amd64.
Preparing to unpack .../46-libncurses5-dev_6.2-0ubuntu2.1_amd64.deb ...
Unpacking libncurses5-dev:amd64 (6.2-0ubuntu2.1) ...
Selecting previously unselected package libreadline-dev:amd64.
Preparing to unpack .../47-libreadline-dev_8.0-4_amd64.deb ...
Unpacking libreadline-dev:amd64 (8.0-4) ...
Selecting previously unselected package libssl-dev:amd64.
Preparing to unpack .../48-libssl-dev_1.1.1f-1ubuntu2.18_amd64.deb ...
Unpacking libssl-dev:amd64 (1.1.1f-1ubuntu2.18) ...
Selecting previously unselected package libstd-rust-1.65:amd64.
Preparing to unpack .../49-libstd-rust-1.65_1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04_amd64.deb ...
Unpacking libstd-rust-1.65:amd64 (1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04) ...
Selecting previously unselected package manpages-dev.
Preparing to unpack .../50-manpages-dev_5.05-1_all.deb ...
Unpacking manpages-dev (5.05-1) ...
Selecting previously unselected package zlib1g-dev:amd64.
Preparing to unpack .../51-zlib1g-dev_1%3a1.2.11.dfsg-2ubuntu1.5_amd64.deb ...
Unpacking zlib1g-dev:amd64 (1:1.2.11.dfsg-2ubuntu1.5) ...
Selecting previously unselected package libdb5.3-dev.
Preparing to unpack .../52-libdb5.3-dev_5.3.28+dfsg1-0.6ubuntu2_amd64.deb ...
Unpacking libdb5.3-dev (5.3.28+dfsg1-0.6ubuntu2) ...
Selecting previously unselected package libdb-dev:amd64.
Preparing to unpack .../53-libdb-dev_1%3a5.3.21~exp1ubuntu2_amd64.deb ...
Unpacking libdb-dev:amd64 (1:5.3.21~exp1ubuntu2) ...
Selecting previously unselected package libffi-dev:amd64.
Preparing to unpack .../54-libffi-dev_3.3-4_amd64.deb ...
Unpacking libffi-dev:amd64 (3.3-4) ...
Selecting previously unselected package libstd-rust-dev:amd64.
Preparing to unpack .../55-libstd-rust-dev_1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04_amd64.deb ...
Unpacking libstd-rust-dev:amd64 (1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04) ...
Selecting previously unselected package libyaml-dev:amd64.
Preparing to unpack .../56-libyaml-dev_0.2.2-1_amd64.deb ...
Unpacking libyaml-dev:amd64 (0.2.2-1) ...
Selecting previously unselected package rustc.
Preparing to unpack .../57-rustc_1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04_amd64.deb ...
Unpacking rustc (1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04) ...
Selecting previously unselected package uuid-dev:amd64.
Preparing to unpack .../58-uuid-dev_2.34-0.1ubuntu9.3_amd64.deb ...
Unpacking uuid-dev:amd64 (2.34-0.1ubuntu9.3) ...
Setting up manpages-dev (5.05-1) ...
Setting up libyaml-dev:amd64 (0.2.2-1) ...
Setting up libfile-fcntllock-perl (0.22-3build4) ...
Setting up libalgorithm-diff-perl (1.19.03-2) ...
Setting up libssl1.1:amd64 (1.1.1f-1ubuntu2.18) ...
Setting up binutils-common:amd64 (2.34-6ubuntu1.5) ...
Setting up linux-libc-dev:amd64 (5.4.0-149.166) ...
Setting up libctf-nobfd0:amd64 (2.34-6ubuntu1.5) ...
Setting up m4 (1.4.18-4) ...
Setting up libgomp1:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up libffi-dev:amd64 (3.3-4) ...
Setting up libfakeroot:amd64 (1.24-1) ...
Setting up fakeroot (1.24-1) ...
update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
Setting up autotools-dev (20180224.1) ...
Setting up libncurses6:amd64 (6.2-0ubuntu2.1) ...
Setting up libquadmath0:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up libssl-dev:amd64 (1.1.1f-1ubuntu2.18) ...
Setting up libmpc3:amd64 (1.1.0-1) ...
Setting up libatomic1:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up libncursesw6:amd64 (6.2-0ubuntu2.1) ...
Setting up libdpkg-perl (1.19.7ubuntu3.2) ...
Setting up autoconf (2.69-11.1) ...
Setting up libubsan1:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up libstd-rust-1.65:amd64 (1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04) ...
Setting up libdb5.3-dev (5.3.28+dfsg1-0.6ubuntu2) ...
Setting up libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...
Setting up libisl22:amd64 (0.22.1-1) ...
Setting up libbinutils:amd64 (2.34-6ubuntu1.5) ...
Setting up libc-dev-bin (2.31-0ubuntu9.9) ...
Setting up libalgorithm-diff-xs-perl (0.04-6) ...
Setting up libcc1-0:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up liblsan0:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up libitm1:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up gcc-9-base:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Setting up libalgorithm-merge-perl (0.08-3) ...
Setting up libtsan0:amd64 (10.3.0-1ubuntu1~20.04) ...
Setting up libctf0:amd64 (2.34-6ubuntu1.5) ...
Setting up automake (1:1.16.1-4ubuntu6) ...
update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode
Setting up libstd-rust-dev:amd64 (1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04) ...
Setting up libasan5:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Setting up libdb-dev:amd64 (1:5.3.21~exp1ubuntu2) ...
Setting up cpp-9 (9.4.0-1ubuntu1~20.04.1) ...
Setting up libc6-dev:amd64 (2.31-0ubuntu9.9) ...
Setting up libgdbm-dev:amd64 (1.18.1-5) ...
Setting up binutils-x86-64-linux-gnu (2.34-6ubuntu1.5) ...
Setting up libncurses-dev:amd64 (6.2-0ubuntu2.1) ...
Setting up binutils (2.34-6ubuntu1.5) ...
Setting up libreadline-dev:amd64 (8.0-4) ...
Setting up dpkg-dev (1.19.7ubuntu3.2) ...
Setting up libgcc-9-dev:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Setting up uuid-dev:amd64 (2.34-0.1ubuntu9.3) ...
Setting up zlib1g-dev:amd64 (1:1.2.11.dfsg-2ubuntu1.5) ...
Setting up cpp (4:9.3.0-1ubuntu2) ...
Setting up libncurses5-dev:amd64 (6.2-0ubuntu2.1) ...
Setting up gcc-9 (9.4.0-1ubuntu1~20.04.1) ...
Setting up libstdc++-9-dev:amd64 (9.4.0-1ubuntu1~20.04.1) ...
Setting up gcc (4:9.3.0-1ubuntu2) ...
Setting up g++-9 (9.4.0-1ubuntu1~20.04.1) ...
Setting up g++ (4:9.3.0-1ubuntu2) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
Setting up rustc (1.65.0+dfsg0ubuntu1~llvm2-0ubuntu0.20.04) ...
Setting up build-essential (12.8ubuntu1.1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

Processing triggers for man-db (2.9.1-1) ...
Processing triggers for install-info (6.7.0.dfsg.2-5) ...
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get install ruby-build
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libc-ares2
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
icu-devtools libicu-dev libicu66 libsqlite3-0 libsqlite3-dev libxml2 libxml2-dev libxslt1-dev libxslt1.1 rbenv
Suggested packages:
icu-doc sqlite3-doc pkg-config bison libtool
The following NEW packages will be installed:
icu-devtools libicu-dev libsqlite3-dev libxml2-dev libxslt1-dev rbenv ruby-build
The following packages will be upgraded:
libicu66 libsqlite3-0 libxml2 libxslt1.1
4 upgraded, 7 newly installed, 0 to remove and 236 not upgraded.
Need to get 21.2 MB of archives.
After this operation, 53.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libicu66 amd64 66.1-2ubuntu2.1 [8515 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libsqlite3-0 amd64 3.31.1-4ubuntu0.5 [549 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libxml2 amd64 2.9.10+dfsg-5ubuntu0.20.04.6 [640 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 icu-devtools amd64 66.1-2ubuntu2.1 [189 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libicu-dev amd64 66.1-2ubuntu2.1 [9451 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libsqlite3-dev amd64 3.31.1-4ubuntu0.5 [697 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libxml2-dev amd64 2.9.10+dfsg-5ubuntu0.20.04.6 [735 kB]
Get:8 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libxslt1.1 amd64 1.1.34-4ubuntu0.20.04.1 [151 kB]
Get:9 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libxslt1-dev amd64 1.1.34-4ubuntu0.20.04.1 [219 kB]
Get:10 http://archive.ubuntu.com/ubuntu focal/universe amd64 rbenv all 1.1.1-1 [22.1 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal/universe amd64 ruby-build all 20170726-1 [46.1 kB]
Fetched 21.2 MB in 13s (1669 kB/s)
(Reading database ... 64775 files and directories currently installed.)
Preparing to unpack .../00-libicu66_66.1-2ubuntu2.1_amd64.deb ...
Unpacking libicu66:amd64 (66.1-2ubuntu2.1) over (66.1-2ubuntu2) ...
Preparing to unpack .../01-libsqlite3-0_3.31.1-4ubuntu0.5_amd64.deb ...
Unpacking libsqlite3-0:amd64 (3.31.1-4ubuntu0.5) over (3.31.1-4ubuntu0.2) ...
Preparing to unpack .../02-libxml2_2.9.10+dfsg-5ubuntu0.20.04.6_amd64.deb ...
Unpacking libxml2:amd64 (2.9.10+dfsg-5ubuntu0.20.04.6) over (2.9.10+dfsg-5ubuntu0.20.04.1) ...
Selecting previously unselected package icu-devtools.
Preparing to unpack .../03-icu-devtools_66.1-2ubuntu2.1_amd64.deb ...
Unpacking icu-devtools (66.1-2ubuntu2.1) ...
Selecting previously unselected package libicu-dev:amd64.
Preparing to unpack .../04-libicu-dev_66.1-2ubuntu2.1_amd64.deb ...
Unpacking libicu-dev:amd64 (66.1-2ubuntu2.1) ...
Selecting previously unselected package libsqlite3-dev:amd64.
Preparing to unpack .../05-libsqlite3-dev_3.31.1-4ubuntu0.5_amd64.deb ...
Unpacking libsqlite3-dev:amd64 (3.31.1-4ubuntu0.5) ...
Selecting previously unselected package libxml2-dev:amd64.
Preparing to unpack .../06-libxml2-dev_2.9.10+dfsg-5ubuntu0.20.04.6_amd64.deb ...
Unpacking libxml2-dev:amd64 (2.9.10+dfsg-5ubuntu0.20.04.6) ...
Preparing to unpack .../07-libxslt1.1_1.1.34-4ubuntu0.20.04.1_amd64.deb ...
Unpacking libxslt1.1:amd64 (1.1.34-4ubuntu0.20.04.1) over (1.1.34-4) ...
Selecting previously unselected package libxslt1-dev:amd64.
Preparing to unpack .../08-libxslt1-dev_1.1.34-4ubuntu0.20.04.1_amd64.deb ...
Unpacking libxslt1-dev:amd64 (1.1.34-4ubuntu0.20.04.1) ...
Selecting previously unselected package rbenv.
Preparing to unpack .../09-rbenv_1.1.1-1_all.deb ...
Unpacking rbenv (1.1.1-1) ...
Selecting previously unselected package ruby-build.
Preparing to unpack .../10-ruby-build_20170726-1_all.deb ...
Unpacking ruby-build (20170726-1) ...
Setting up ruby-build (20170726-1) ...
Setting up libicu66:amd64 (66.1-2ubuntu2.1) ...
Setting up libsqlite3-0:amd64 (3.31.1-4ubuntu0.5) ...
Setting up libsqlite3-dev:amd64 (3.31.1-4ubuntu0.5) ...
Setting up icu-devtools (66.1-2ubuntu2.1) ...
Setting up rbenv (1.1.1-1) ...
Setting up libicu-dev:amd64 (66.1-2ubuntu2.1) ...
Setting up libxml2:amd64 (2.9.10+dfsg-5ubuntu0.20.04.6) ...
Setting up libxml2-dev:amd64 (2.9.10+dfsg-5ubuntu0.20.04.6) ...
Setting up libxslt1.1:amd64 (1.1.34-4ubuntu0.20.04.1) ...
Setting up libxslt1-dev:amd64 (1.1.34-4ubuntu0.20.04.1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$


9、作为 rbenv 插件,列出所有可用的 Ruby 版本,执行命令:rbenv install –list ,安装 Ruby rbx-3.82 到 ~/.rbenv/versions,执行命令:rbenv install rbx-3.82。安装失败。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ rbenv install --list
Available versions:
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
1.8.6
1.8.6-p36
1.8.6-p110
1.8.6-p111
1.8.6-p114
1.8.6-p230
1.8.6-p286
1.8.6-p287
1.8.6-p368
1.8.6-p369
1.8.6-p383
1.8.6-p388
1.8.6-p398
1.8.6-p399
1.8.6-p420
1.8.7-preview1
1.8.7-preview2
1.8.7-preview3
1.8.7-preview4
1.8.7
1.8.7-p17
1.8.7-p22
1.8.7-p71
1.8.7-p72
1.8.7-p160
1.8.7-p173
1.8.7-p174
1.8.7-p248
1.8.7-p249
1.8.7-p299
1.8.7-p301
1.8.7-p302
1.8.7-p330
1.8.7-p334
1.8.7-p352
1.8.7-p357
1.8.7-p358
1.8.7-p370
1.8.7-p371
1.8.7-p373
1.8.7-p374
1.8.7-p375
1.9.0-0
1.9.0-1
1.9.0-2
1.9.0-3
1.9.0-4
1.9.0-5
1.9.1-preview1
1.9.1-preview2
1.9.1-rc1
1.9.1-rc2
1.9.1-p0
1.9.1-p129
1.9.1-p243
1.9.1-p376
1.9.1-p378
1.9.1-p429
1.9.1-p430
1.9.1-p431
1.9.2-preview1
1.9.2-preview3
1.9.2-rc1
1.9.2-rc2
1.9.2-p0
1.9.2-p136
1.9.2-p180
1.9.2-p290
1.9.2-p318
1.9.2-p320
1.9.2-p326
1.9.2-p330
1.9.3-dev
1.9.3-preview1
1.9.3-rc1
1.9.3-p0
1.9.3-p105
1.9.3-p125
1.9.3-p194
1.9.3-p286
1.9.3-p327
1.9.3-p362
1.9.3-p374
1.9.3-p385
1.9.3-p392
1.9.3-p426
1.9.3-p429
1.9.3-p448
1.9.3-p484
1.9.3-p545
1.9.3-p547
1.9.3-p550
1.9.3-p551
2.0.0-dev
2.0.0-preview1
2.0.0-preview2
2.0.0-rc1
2.0.0-rc2
2.0.0-p0
2.0.0-p195
2.0.0-p247
2.0.0-p353
2.0.0-p451
2.0.0-p481
2.0.0-p576
2.0.0-p594
2.0.0-p598
2.0.0-p643
2.0.0-p645
2.0.0-p647
2.0.0-p648
2.1.0-dev
2.1.0-preview1
2.1.0-preview2
2.1.0-rc1
2.1.0
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
2.1.10
2.2.0-dev
2.2.0-preview1
2.2.0-preview2
2.2.0-rc1
2.2.0
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
2.3.0-dev
2.3.0-preview1
2.3.0-preview2
2.3.0
2.3.1
2.3.2
2.3.3
2.3.4
2.4.0-dev
2.4.0-preview1
2.4.0-preview2
2.4.0-preview3
2.4.0-rc1
2.4.0
2.4.1
2.5.0-dev
jruby-1.5.6
jruby-1.6.3
jruby-1.6.4
jruby-1.6.5
jruby-1.6.5.1
jruby-1.6.6
jruby-1.6.7
jruby-1.6.7.2
jruby-1.6.8
jruby-1.7.0-preview1
jruby-1.7.0-preview2
jruby-1.7.0-rc1
jruby-1.7.0-rc2
jruby-1.7.0
jruby-1.7.1
jruby-1.7.2
jruby-1.7.3
jruby-1.7.4
jruby-1.7.5
jruby-1.7.6
jruby-1.7.7
jruby-1.7.8
jruby-1.7.9
jruby-1.7.10
jruby-1.7.11
jruby-1.7.12
jruby-1.7.13
jruby-1.7.14
jruby-1.7.15
jruby-1.7.16
jruby-1.7.16.1
jruby-1.7.16.2
jruby-1.7.17
jruby-1.7.18
jruby-1.7.19
jruby-1.7.20
jruby-1.7.20.1
jruby-1.7.21
jruby-1.7.22
jruby-1.7.23
jruby-1.7.24
jruby-1.7.25
jruby-1.7.26
jruby-1.7.27
jruby-9.0.0.0.pre1
jruby-9.0.0.0.pre2
jruby-9.0.0.0.rc1
jruby-9.0.0.0.rc2
jruby-9.0.0.0
jruby-9.0.1.0
jruby-9.0.3.0
jruby-9.0.4.0
jruby-9.0.5.0
jruby-9.1.0.0-dev
jruby-9.1.0.0
jruby-9.1.1.0
jruby-9.1.2.0
jruby-9.1.3.0
jruby-9.1.4.0
jruby-9.1.5.0
jruby-9.1.6.0
jruby-9.1.7.0
jruby-9.1.8.0
jruby-9.1.9.0-dev
jruby-9.1.9.0
jruby-9.1.10.0
jruby-9.1.11.0
jruby-9.1.12.0
maglev-1.0.0
maglev-1.1.0-dev
maglev-2.0.0-dev
mruby-dev
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
rbx-2.2.2
rbx-2.2.3
rbx-2.2.4
rbx-2.2.5
rbx-2.2.6
rbx-2.2.7
rbx-2.2.8
rbx-2.2.9
rbx-2.2.10
rbx-2.3.0
rbx-2.4.0
rbx-2.4.1
rbx-2.5.0
rbx-2.5.1
rbx-2.5.2
rbx-2.5.3
rbx-2.5.4
rbx-2.5.5
rbx-2.5.6
rbx-2.5.7
rbx-2.5.8
rbx-2.6
rbx-2.7
rbx-2.8
rbx-2.9
rbx-2.10
rbx-2.11
rbx-2.71828182
rbx-3.0
rbx-3.1
rbx-3.2
rbx-3.3
rbx-3.4
rbx-3.5
rbx-3.6
rbx-3.7
rbx-3.8
rbx-3.9
rbx-3.10
rbx-3.11
rbx-3.12
rbx-3.13
rbx-3.14
rbx-3.15
rbx-3.16
rbx-3.17
rbx-3.18
rbx-3.19
rbx-3.20
rbx-3.21
rbx-3.22
rbx-3.23
rbx-3.24
rbx-3.25
rbx-3.26
rbx-3.27
rbx-3.28
rbx-3.29
rbx-3.30
rbx-3.31
rbx-3.32
rbx-3.33
rbx-3.34
rbx-3.35
rbx-3.36
rbx-3.37
rbx-3.38
rbx-3.39
rbx-3.40
rbx-3.41
rbx-3.42
rbx-3.43
rbx-3.44
rbx-3.45
rbx-3.46
rbx-3.47
rbx-3.48
rbx-3.49
rbx-3.50
rbx-3.51
rbx-3.52
rbx-3.53
rbx-3.54
rbx-3.55
rbx-3.56
rbx-3.57
rbx-3.58
rbx-3.59
rbx-3.60
rbx-3.61
rbx-3.62
rbx-3.63
rbx-3.64
rbx-3.65
rbx-3.66
rbx-3.67
rbx-3.68
rbx-3.69
rbx-3.70
rbx-3.71
rbx-3.72
rbx-3.73
rbx-3.74
rbx-3.75
rbx-3.76
rbx-3.77
rbx-3.78
rbx-3.79
rbx-3.80
rbx-3.81
rbx-3.82
ree-1.8.7-2011.03
ree-1.8.7-2011.12
ree-1.8.7-2012.01
ree-1.8.7-2012.02
topaz-dev
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ rbenv install rbx-3.82
Downloading rubinius-3.82.tar.bz2...
-&gt; https://dqw8nmjcqpjn7.cloudfront.net/53abb85219980d7307a762660e1d509cd74beccbcf4d46979ddd0749e77a1401
Installing rubinius-3.82...

BUILD FAILED (Ubuntu 20.04 using ruby-build 20170726)

Inspect or clean up the working tree at /tmp/ruby-build.20230530173243.9015
Results logged to /tmp/ruby-build.20230530173243.9015.log

Last 10 log lines:
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /tmp/ruby-build.20230530173243.9015/rubinius-3.82/vendor/bundle/ruby/2.7.0/gems/rubinius-melbourne-3.9/ext/rubinius/code/melbourne
/usr/bin/ruby2.7 -I /usr/lib/ruby/2.7.0 -r ./siteconf20230530-9078-1ds9pho.rb extconf.rb ''
extconf failedno implicit conversion of nil into String

Gem files will remain installed in /tmp/ruby-build.20230530173243.9015/rubinius-3.82/vendor/bundle/ruby/2.7.0/gems/rubinius-melbourne-3.9 for inspection.
Results logged to /tmp/ruby-build.20230530173243.9015/rubinius-3.82/vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/rubinius-melbourne-3.9/gem_make.out
An error occurred while installing rubinius-melbourne (3.9), and Bundler cannot continue.
Make sure that `gem install rubinius-melbourne -v '3.9'` succeeds before bundling.


10、决定卸载 Ruby 2.7


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get remove ruby-full
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libc-ares2
Use 'sudo apt autoremove' to remove it.
The following packages will be REMOVED:
ruby-full
0 upgraded, 0 newly installed, 1 to remove and 236 not upgraded.
After this operation, 19.5 kB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 65638 files and directories currently installed.)
Removing ruby-full (1:2.7+1) ...
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ sudo apt-get remove ruby
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
fonts-lato javascript-common libc-ares2 libjs-jquery ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit
ruby-xmlrpc ruby2.7-doc rubygems-integration unzip zip
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
libruby2.7 rake rbenv ri ruby ruby-dev ruby2.7 ruby2.7-dev
0 upgraded, 0 newly installed, 8 to remove and 236 not upgraded.
After this operation, 19.3 MB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 65634 files and directories currently installed.)
Removing ruby-dev:amd64 (1:2.7+1) ...
Removing ruby2.7-dev:amd64 (2.7.0-5ubuntu1.11) ...
Removing rbenv (1.1.1-1) ...
Removing ri (1:2.7+1) ...
Removing ruby2.7 (2.7.0-5ubuntu1.11) ...
Removing libruby2.7:amd64 (2.7.0-5ubuntu1.11) ...
Removing rake (13.0.1-4) ...
Removing ruby (1:2.7+1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$ ruby -v
-bash: /usr/bin/ruby: No such file or directory
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot/shopify-app$


11、作为 rbenv 插件,列出所有可用的 Ruby 版本,执行命令:rbenv install –list ,提示命令不存在,重新安装 rbenv。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ rbenv install --list

Command 'rbenv' not found, but can be installed with:

sudo apt install rbenv
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ sudo apt install rbenv


12、作为 rbenv 插件,安装 Ruby rbx-3.82 到 ~/.rbenv/versions,执行命令:rbenv install rbx-3.82。安装失败,报错:gem install rubinius-melbourne -v ‘3.9’


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ rbenv install rbx-3.82
Downloading rubinius-3.82.tar.bz2...
-&gt; https://dqw8nmjcqpjn7.cloudfront.net/53abb85219980d7307a762660e1d509cd74beccbcf4d46979ddd0749e77a1401
Installing rubinius-3.82...

BUILD FAILED (Ubuntu 20.04 using ruby-build 20170726)

Inspect or clean up the working tree at /tmp/ruby-build.20230531093842.693
Results logged to /tmp/ruby-build.20230531093842.693.log

Last 10 log lines:
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /tmp/ruby-build.20230531093842.693/rubinius-3.82/vendor/bundle/ruby/2.7.0/gems/rubinius-melbourne-3.9/ext/rubinius/code/melbourne
/usr/bin/ruby2.7 -I /usr/lib/ruby/2.7.0 -r ./siteconf20230531-756-1f7i4tc.rb extconf.rb ''
extconf failedno implicit conversion of nil into String

Gem files will remain installed in /tmp/ruby-build.20230531093842.693/rubinius-3.82/vendor/bundle/ruby/2.7.0/gems/rubinius-melbourne-3.9 for inspection.
Results logged to /tmp/ruby-build.20230531093842.693/rubinius-3.82/vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/rubinius-melbourne-3.9/gem_make.out
An error occurred while installing rubinius-melbourne (3.9), and Bundler cannot continue.
Make sure that `gem install rubinius-melbourne -v '3.9'` succeeds before bundling.


13、执行命令:sudo gem install rubinius-melbourne -v ‘3.9’ ,报错:make: *** [Makefile:45: encoding_compat.o] Error 1


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ sudo gem install rubinius-melbourne -v '3.9'
[sudo] password for wangqiang:
Fetching rubinius-melbourne-3.9.gem
Building native extensions. This could take a while...
ERROR: Error installing rubinius-melbourne:
ERROR: Failed to build gem native extension.

current directory: /var/lib/gems/2.7.0/gems/rubinius-melbourne-3.9/ext/rubinius/code/melbourne
/usr/bin/ruby2.7 -I /usr/lib/ruby/2.7.0 -r ./siteconf20230531-774-1d47cv.rb extconf.rb

current directory: /var/lib/gems/2.7.0/gems/rubinius-melbourne-3.9/ext/rubinius/code/melbourne
make "DESTDIR=" clean

current directory: /var/lib/gems/2.7.0/gems/rubinius-melbourne-3.9/ext/rubinius/code/melbourne
make "DESTDIR="
compiling node_types.cpp
node_types.cpp: In function ‘const char* melbourne_1685498084::get_node_type_string(melbourne_1685498084::node_type)’:
node_types.cpp:264:66: warning: ‘%d’ directive output truncated writing between 3 and 10 bytes into a region of size 1 [-Wformat-truncation=]
264 | snprintf(msg, NODE_STRING_MESSAGE_LEN, "unknown node type: %d", node);
| ^~
node_types.cpp:264:46: note: directive argument in the range [121, 2147483647]
264 | snprintf(msg, NODE_STRING_MESSAGE_LEN, "unknown node type: %d", node);
| ^~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:867,
from node_types.cpp:6:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:35: note: ‘__builtin___snprintf_chk’ output between 23 and 30 bytes into a destination of size 20
67 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compiling encoding_compat.cpp
In file included from encoding_compat.hpp:7,
from encoding_compat.cpp:1:
melbourne.hpp:28:10: fatal error: ruby.h: No such file or directory
28 | #include "ruby.h"
| ^~~~~~~~
compilation terminated.
make: *** [Makefile:45: encoding_compat.o] Error 1

make failed, exit code 2

Gem files will remain installed in /var/lib/gems/2.7.0/gems/rubinius-melbourne-3.9 for inspection.
Results logged to /var/lib/gems/2.7.0/extensions/x86_64-linux/2.7.0/rubinius-melbourne-3.9/gem_make.out


14、决定更新 gem 至最新版本。


wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ bundle-update
bundle-update: command not found
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ sudo gem install bundler
[sudo] password for wangqiang:
Sorry, try again.
[sudo] password for wangqiang:
Fetching bundler-2.4.13.gem
Successfully installed bundler-2.4.13
Parsing documentation for bundler-2.4.13
Installing ri documentation for bundler-2.4.13
Done installing documentation for bundler after 0 seconds
1 gem installed
wangqiang@DESKTOP-QLPK8QM:/mnt/e/wwwroot$ bundle-update
bundle-update: command not found


15、在应用设置中,重置 Ubuntu-20.04 后,不再基于包管理器安装 Ruby ,而是基于 rbenv-installer 脚本在您的系统上幂等地安装或更新 rbenv。 如果检测到 Homebrew,安装将使用 brew install/upgrade 继续。 否则,rbenv 安装在 ~/.rbenv 下。 此外,如果 rbenv install 尚不可用,也会安装 ruby-build。如图2
基于 rbenv-installer 脚本在您的系统上幂等地安装或更新 rbenv

图2



wangqiang@DESKTOP-QLPK8QM:~$ sudo apt-get update
wangqiang@DESKTOP-QLPK8QM:~$ wget -q https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer -O- | bash
Installing rbenv with git...
Initialized empty Git repository in /home/wangqiang/.rbenv/.git/
Updating origin
remote: Enumerating objects: 3176, done.
remote: Counting objects: 100% (333/333), done.
remote: Compressing objects: 100% (192/192), done.
remote: Total 3176 (delta 179), reused 252 (delta 129), pack-reused 2843
Receiving objects: 100% (3176/3176), 638.26 KiB | 184.00 KiB/s, done.
Resolving deltas: 100% (1967/1967), done.
From https://github.com/rbenv/rbenv
* [new branch] master -&gt; origin/master
* [new tag] v0.1.0 -&gt; v0.1.0
* [new tag] v0.1.1 -&gt; v0.1.1
* [new tag] v0.1.2 -&gt; v0.1.2
* [new tag] v0.2.0 -&gt; v0.2.0
* [new tag] v0.2.1 -&gt; v0.2.1
* [new tag] v0.3.0 -&gt; v0.3.0
* [new tag] v0.4.0 -&gt; v0.4.0
* [new tag] v1.0.0 -&gt; v1.0.0
* [new tag] v1.1.0 -&gt; v1.1.0
* [new tag] v1.1.1 -&gt; v1.1.1
* [new tag] v1.1.2 -&gt; v1.1.2
* [new tag] v1.2.0 -&gt; v1.2.0
Branch 'master' set up to track remote branch 'master' from 'origin'.
Already on 'master'

Installing ruby-build with git...
Cloning into '/home/wangqiang/.rbenv/plugins/ruby-build'...
remote: Enumerating objects: 13982, done.
remote: Counting objects: 100% (132/132), done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 13982 (delta 83), reused 118 (delta 78), pack-reused 13850
Receiving objects: 100% (13982/13982), 2.80 MiB | 46.00 KiB/s, done.
Resolving deltas: 100% (9566/9566), done.

All done!
Note that this installer does NOT edit your shell configuration files:
1. Run `~/.rbenv/bin/rbenv init' to view instructions on how to configure rbenv for your shell.
2. Launch a new terminal window after editing shell configuration files.
3. (Optional) Run the doctor command to verify the installation:
wget -q "https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor" -O- | bash



16、运行 `~/.rbenv/bin/rbenv init’ 查看有关如何为您的 shell 配置 rbenv 的说明。添加 eval “$(/home/wangqiang/.rbenv/bin/rbenv init – bash)” 至 ~/.bashrc,然后重启终端。


wangqiang@DESKTOP-QLPK8QM:~$ ~/.rbenv/bin/rbenv init
# Please add the following line to your `~/.bashrc' file,
# then restart your terminal.

eval "$(/home/wangqiang/.rbenv/bin/rbenv init - bash)"

wangqiang@DESKTOP-QLPK8QM:~$ echo 'eval "$(/home/wangqiang/.rbenv/bin/rbenv init - bash)"' &gt;&gt; ~/.bashrc
wangqiang@DESKTOP-QLPK8QM:~$


17、编辑 shell 配置文件后启动一个新的终端窗口。如图3
编辑 shell 配置文件后启动一个新的终端窗口

图3

18、您可以使用以下命令验证 rbenv 安装的状态,验证通过。


wangqiang@DESKTOP-QLPK8QM:~$ wget -q https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor -O- | bash
Checking for `rbenv' in PATH: /home/wangqiang/.rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /home/wangqiang/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20230512)
Counting installed Ruby versions: none
There aren't any Ruby versions installed under `/home/wangqiang/.rbenv/versions'.
You can install Ruby versions like so: rbenv install 3.2.2
Auditing installed plugins: OK


19、执行命令: rbenv install 3.2.2 ,安装失败,报错:No C compiler found, please specify one with the environment variable CC,or configure with an explicit configuration target.


wangqiang@DESKTOP-QLPK8QM:~$ rbenv install --list
3.0.6
3.1.4
3.2.2
jruby-9.4.2.0
mruby-3.2.0
picoruby-3.0.0
truffleruby-22.3.1
truffleruby+graalvm-22.3.1

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
wangqiang@DESKTOP-QLPK8QM:~$ rbenv install 3.2.2
To follow progress, use 'tail -f /tmp/ruby-build.20230602104329.795.log' or pass --verbose
No system openssl version was found, ensure openssl headers are installed (https://github.com/rbenv/ruby-build/wiki#suggested-build-environment)
Downloading openssl-3.1.0.tar.gz...
-&gt; https://dqw8nmjcqpjn7.cloudfront.net/aaa925ad9828745c4cad9d9efeb273deca820f2cdcf2c3ac7d7c1212b7c497b4
Installing openssl-3.1.0...

BUILD FAILED (Ubuntu 20.04 using ruby-build 20230512)

Inspect or clean up the working tree at /tmp/ruby-build.20230602104329.795.clWddR
Results logged to /tmp/ruby-build.20230602104329.795.log

Last 10 log lines:

/tmp/ruby-build.20230602104329.795.clWddR/openssl-3.1.0 /tmp/ruby-build.20230602104329.795.clWddR ~

Failure! build file wasn't produced.
Please read INSTALL.md and associated NOTES-* files. You may also have to
look over your available compiler tool chain or change your configuration.

ERROR!
No C compiler found, please specify one with the environment variable CC,
or configure with an explicit configuration target.


20、在下载并尝试从源代码编译 Ruby 之前,ruby-build 通常不会验证系统依赖项是否存在。 请确保所有必需的库(例如构建工具和开发标头)已存在于您的系统中。按照建议的构建环境中的说明进行操作。安装依赖项。


wangqiang@DESKTOP-QLPK8QM:~$ sudo apt-get install autoconf patch build-essential rustc libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libgmp-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev uuid-dev



21、重新安装 Ruby 3.2.2,设置 Ruby 版本以完成安装并开始使用 Ruby,为这台机器设置默认的 Ruby 版本。如图4
重新安装 Ruby 3.2.2,设置 Ruby 版本以完成安装并开始使用 Ruby,为这台机器设置默认的 Ruby 版本

图4



wangqiang@DESKTOP-QLPK8QM:~$ rbenv install 3.2.2
To follow progress, use 'tail -f /tmp/ruby-build.20230602105714.6877.log' or pass --verbose
Downloading ruby-3.2.2.tar.gz...
-&gt; https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
Installing ruby-3.2.2...
Installed ruby-3.2.2 to /home/wangqiang/.rbenv/versions/3.2.2

NOTE: to activate this Ruby version as the new default, run: rbenv global 3.2.2
wangqiang@DESKTOP-QLPK8QM:~$ rbenv global 3.2.2
wangqiang@DESKTOP-QLPK8QM:~$ ruby --version
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
wangqiang@DESKTOP-QLPK8QM:~$


22、继续安装 gems


wangqiang@DESKTOP-QLPK8QM:~$ gem install bundler
Fetching bundler-2.4.13.gem
Successfully installed bundler-2.4.13
Parsing documentation for bundler-2.4.13
Installing ri documentation for bundler-2.4.13
Done installing documentation for bundler after 0 seconds
1 gem installed

A new release of RubyGems is available: 3.4.10 → 3.4.13!
Run `gem update --system 3.4.13` to update your installation.



23、参考 : 使用以下命令安装在 Linux 上安装和运行 Shopify CLI 的所有要求,包含(Ruby development environment (ruby-dev / ruby-devel)、Git、cURL、GCC、g++、Make)。Node.js 与 Ruby 除外。


wangqiang@DESKTOP-QLPK8QM:~$ sudo apt update &amp;&amp; sudo apt upgrade
wangqiang@DESKTOP-QLPK8QM:~$ sudo apt install curl gcc g++ make
Reading package lists... Done
Building dependency tree
Reading state information... Done
g++ is already the newest version (4:9.3.0-1ubuntu2).
g++ set to manually installed.
gcc is already the newest version (4:9.3.0-1ubuntu2).
gcc set to manually installed.
make is already the newest version (4.2.1-1.2).
make set to manually installed.
curl is already the newest version (7.68.0-1ubuntu2.18).
curl set to manually installed.
The following packages were automatically installed and are no longer required:
libfwupdplugin1 libxmlb1
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
wangqiang@DESKTOP-QLPK8QM:~$ sudo apt install ruby-dev
wangqiang@DESKTOP-QLPK8QM:~$ sudo apt install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
git is already the newest version (1:2.25.1-1ubuntu3.11).
git set to manually installed.
The following packages were automatically installed and are no longer required:
libfwupdplugin1 libxmlb1
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


24、安装和运行 Shopify CLI 的所有要求全部准备完毕且满足要求。]]>
https://www.shuijingwanwq.com/2023/06/27/7783/feed/ 2
TortoiseGit 检测到文件 不存在,但已在“索引”中暂存为“添加”或“修改”。“提交”对话框无法处置。您要从索引中恢复或者删除它吗? https://www.shuijingwanwq.com/2023/04/24/7574/ https://www.shuijingwanwq.com/2023/04/24/7574/#respond Mon, 24 Apr 2023 01:24:26 +0000 https://www.shuijingwanwq.com/?p=7574 浏览量: 67

1、TortoiseGit 检测到文件 不存在,但已在“索引”中暂存为“添加”或“修改”。“提交”对话框无法处置。您要从索引中恢复或者删除它吗?从索引中恢复这个文件(E) 从索引中去掉这个文件(R) 忽略。如图1

TortoiseGit 检测到文件 不存在,但已在“索引”中暂存为“添加”或“修改”。“提交”对话框无法处置。您要从索引中恢复或者删除它吗?从索引中恢复这个文件(E) 从索引中去掉这个文件(R) 忽略

图1

2、从索引中恢复这个文件(E),提示:Restoring from index failed: fatal: Unable to create “E:/wwwroot/object/.git/index.lock”: File exists.如图2

从索引中恢复这个文件(E),提示:Restoring from index failed: fatal: Unable to create "E:/wwwroot/object/.git/index.lock": File exists

图2

3、手动删除文件:”E:/wwwroot/object/.git/index.lock”。如图3

手动删除文件:"E:/wwwroot/object/.git/index.lock"

图3

4、从索引中恢复这个文件(E),提示:Due to changes to the index, please refresh the dialog (e.g., by pressing F5).如图4

从索引中恢复这个文件(E),提示:Due to changes to the index, please refresh the dialog (e.g., by pressing F5)

图4

5、文件:E:\wwwroot\object\xxx\Modules\ThemeStoreDb\Models\ThemeInstallationTask.php 已经恢复,现已存在。如图5

文件:E:\wwwroot\object\xxx\Modules\ThemeStoreDb\Models\ThemeInstallationTask.php 已经恢复,现已存在

图5

]]>
https://www.shuijingwanwq.com/2023/04/24/7574/feed/ 0
在 Windows 10 的 Git 提交中处理目录名称大小写的问题(剪切目录模拟目录的删除) https://www.shuijingwanwq.com/2023/01/30/7380/ https://www.shuijingwanwq.com/2023/01/30/7380/#respond Mon, 30 Jan 2023 01:25:22 +0000 https://www.shuijingwanwq.com/?p=7380 浏览量: 87

1、在 GitLab 中查看目录结构,存在目录:ThemeStoreDb、ThemeStoreDB,这是由于目录 ThemeStoreDB 被重命名为 ThemeStoreDb 后,不小心又合并了旧的基于 ThemeStoreDB 的代码所导致。如图1

在 GitLab 中查看目录结构,存在目录:ThemeStoreDb、ThemeStoreDB,这是由于目录 ThemeStoreDB 被重命名为 ThemeStoreDb 后,不小心又合并了旧的基于 ThemeStoreDB 的代码所导致

图1

2、在本地 Windows 10 的磁盘中,仅存在目录 ThemeStoreDb,在拉取代码后目录:ThemeStoreDb、ThemeStoreDB 已经自动合并,原因在于 Windows 10 中目录不区分大小写。

3、最终决定先删除掉目录:ThemeStoreDB,如何删除,剪切目录:ThemeStoreDb 至其他目录,然后 Git 提交。仅勾选目录:ThemeStoreDB 下相关的文件。如图2

最终决定先删除掉目录:ThemeStoreDB,如何删除,剪切目录:ThemeStoreDb 至其他目录,然后 Git 提交。仅勾选目录:ThemeStoreDB 下相关的文件

图2

4、再次将目录:ThemeStoreDb 剪切回来,然后 Git 提交,发现无更改。符合预期。如图3

再次将目录:ThemeStoreDb 剪切回来,然后 Git 提交,发现无更改。符合预期

图3

5、查看 GitLab 上的目录结构,目录:ThemeStoreDB 已经被删除。符合预期。如图4

查看 GitLab 上的目录结构,目录:ThemeStoreDB 已经被删除。符合预期

图4

]]>
https://www.shuijingwanwq.com/2023/01/30/7380/feed/ 0
编辑 .gitignore ,以添加一些忽略目录(目录名未知,基于 UUID 生成目录名) https://www.shuijingwanwq.com/2022/12/05/7248/ https://www.shuijingwanwq.com/2022/12/05/7248/#respond Mon, 05 Dec 2022 02:09:04 +0000 https://www.shuijingwanwq.com/?p=7248 浏览量: 69 1、编辑 .gitignore,文件与目录 puclic 平级 ,以添加一些忽略目录(目录名未知)。在目录:public 下会生成一些目录,而这一些目录皆应该被忽略。如图1
编辑 .gitignore,文件与目录 puclic 平级 ,以添加一些忽略目录(目录名未知)。在目录:public 下会生成一些目录,而这一些目录皆应该被忽略

图1

2、查看现在的内容,所有以 /public/ 开头的内容


/public/certificate_sandbox.*
/public/.well-known
/public/hot
/public/storage
/public/js
/public/global
/public/chunk
/public/default
/public/css
/public/venue
/public/showtime
/public/vogue
/public/athena
/public/checkout
/public/fonts
/public/iconfont
/public/images
/public/12345
/public/*.js
/public/*.js.LICENSE.txt
/public/mix-manifest.json
/public/nginx.htaccess

# /public/fonts
/public/vendor

/public/page-cache/



3、查看 GitLab 目录 public 下未被忽略的已经被提交的文件。如图2
查看 GitLab 目录 public 下未被忽略的已经被提交的文件

图2

4、现在不能够明确地指定 public 下的目录名称,因为这些目录名称(UUID形式)是在程序运行时自动生成的。 5、因此,只能够明确定义在 public 目录下,有哪些文件应该不被忽略了。参考:https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93 中的忽略文件。先忽略 /public 目录下的所有文件,然后再添加例外。调整为如下


/public/*
!/public/modules
!/public/appcode.png
!/public/domain.txt
!/public/favicon.ico
!/public/index.php
!/public/logo.png
!/public/robots.pages.txt
!/public/robots.txt
!/public/tracking-api.js
!/public/web.config


6、新建文件 /public/1.php、/public/modules/2.php,提交时,发现仅有文件 /public/modules/2.php 被提交,基于 UUID 生成的一些目录已被忽略。符合预期。如果后续 /public 目录下有新的目录或者文件需要提交,则需要添加 ! ,以确认需要跟踪。如图3
新建文件 /public/1.php、/public/modules/2.php,提交时,发现仅有文件 /public/modules/2.php 被提交,基于 UUID 生成的一些目录已被忽略。符合预期。如果后续 /public 目录下有新的目录或者文件需要提交,则需要添加 ! ,以确认需要跟踪

图3

]]>
https://www.shuijingwanwq.com/2022/12/05/7248/feed/ 0