下面记录一下在复活网校打印机机器人-红岩打印姬时遇到的问题和解决方案

做出的更新

1.使用了Helemet-CI进行镜像打包

2.更改了Dockerfile的内容,使镜像可以快速且正确的被打包

3.由于飞书接收消息接口的json接收体发生了改变,对reply.py中的file_namefile_keyimage_key三个变量的获取造成了影响,使用json.loads()函数解决

1.读取环境变量问题

机器人通过configmap读取app_idapp_secret等环境变量,没有configmap的话机器人会报以下错误

Traceback (most recent call last):
File "/nonebot/bot.py", line 22, in <module>
driver.register_adapter(FeishuAdapter)
File "/usr/local/lib/python3.10/dist-packages/nonebot/internal/driver/abstract.py", line 77, in register_adapter
self._adapters[name] = adapter(self, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/nonebot/adapters/feishu/adapter.py", line 46, in __init__
self.feishu_config: Config = Config(**self.config.dict())
File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Config
feishu_bots
value is not a valid list (type=type_error.list)

提示feishu_bots不是一个有效列表,意味着机器人未读取到configmap里的环境变量

在部署时也不能直接把这些环境变量直接明文填写在.env.prod

2.Dockerfile的修改

2.1 apt换源问题

最开始的Dockerfile使用了python:slim镜像,导致在执行apt-get update命令时异常的慢

并且在这个镜像(debian镜像也是)中不能更改镜像源,会提示

image-20231025194635047

于是更改为

FROM ubuntu:22.04

使用sed命令更改镜像源为清华源

RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list   

2.2 pip换源问题

最开始的Dockerfile中的所有pip install均未指定源,经常会出现网络问题

862eb61f-b7c0-481b-8f9f-6f31fc135ce3

于是我向所有pip都指定了源

使用pipx install nb-cli经常出现网络问题

pipx 是一个自由开源程序,允许你在隔离的虚拟环境中安装和运行 Python 应用。

20231023-164641

使用pip install nb-cli -i https://pypi.tuna.tsinghua.edu.cn/simple即可解决

2.3 未找到nb命令

/bin/sh: 1: /root/.local/bin/nb: not found

在Dockerfile中

CMD which nb

即可显示正确的nb位置

3.IngressRoute请求路径下划线问题

在IngressRoute中,请求路径最后的下划线会影响解析

image-20231025203025401

在本实例中,不加下划线才能被正确解析

image-20231025203617314

4.飞书接收消息接收体改变影响变量问题

飞书接收消息json接收体结构如下

{
"schema": "2.0",
"header": {
"event_id": "56dc6536843b7bd94680cf2af1c8791",
"token": "aJ2XlWEC5uNfiaQMzaNUCbFMeIW28828",
"create_time": "1698134093609",
"event_type": "im.message.receive_v1",
"tenant_key": "17cf1f7e2f06d758",
"app_id": "cli_a42011585561100d"
},
"event": {
"message": {
"chat_id": "oc_8b46f745993928bcfe0f23fe30cee4d0",
"chat_type": "p2p",
"content": "{\"file_key\":\"file_v2_718639f3-fbf7-4a12-8ff3-56ea16b1d4ag\",\"file_name\":\"a.pdf\"}",
"create_time": "1698134093362",
"message_id": "om_3fb62cafecae381509e6e36eeb2f5cc3",
"message_type": "file",
"update_time": "1698134093362"
},
"sender": {
"sender_id": {
"open_id": "ou_b7f2f10f337267948c94258ab8c684e",
"union_id": "on_01a1d695ec162830a027295516386bdc",
"user_id": "9a8cfgee"
},
"sender_type": "user",
"tenant_key": "17cf1f7e2f06d758"
}
}
}

对原先reply.pyfile_namefile_keyimage_key三个变量的获取造成了影响

20231025-204615

现通过json.loads()函数重新提取这三个变量,其他同理

e为整个接收体的内容,event为event的内容,其他同理

image-20231025204912283