前言

最近开发中遇到很多相同的问题,下意识去翻自己的历史记录,但又没能快速定位。我的trilium一直用来记录自己的周报和相关教程,对于常见的bug和修复方案也找不到合适的地方,只能穿插在日报的历史中,随时间沉没。无意间翻到子舒的奇趣周刊,Bug周刊也由此而生。

github展示代码统计(WakaTime)

问题描述

我想要在github主页上添加 WakaTime 的代码统计,在配置了api的secret后,github action报错如下:

1
2
3
Run athul/waka-readme@master 
[2024-03-08 01:31:58] ln. 478 DEBUG WakaReadme stats has changed
[2024-03-08 01:31:58] ln. 522 CRITICAL 403 {"message": "Resource not accessible by integration", "documentation_url": "https://docs.github.com/rest/repos/contents#create-or-update-file-contents"}

解决方案

1、检查 waka-time.yml 是否有误(WAKATIME_API_KEY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
name: Waka Readme

on:
# for manual workflow trigger
workflow_dispatch:
schedule:
# runs at 12 AM UTC (5:30 AM IST)
- cron: "0 0 * * *"

jobs:
update-readme:
name: WakaReadme DevMetrics
runs-on: ubuntu-latest
steps:
- uses: athul/waka-readme@master # this action name
with:
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}

2、检查仓库的action是否有读写的权限

配置完毕后将会显示

1
[2024-03-11 08:04:18] ln. 300 DEBUG    The API data seems to be empty, please wait for a day

只需要在你本地的编辑器(vscode、idea等)安装wakatime的插件,配置好key,继续你的日常coding,等一天就有数据产生了。

参考链接

wakatime 数据同步

问题描述

在获得wakatime的统计数据后,发现非会员用户只能获得14天的数据,我希望能够获取全部的数据,同时能够渲染成仪表盘。

解决方案

一台有docker环境的服务器,以 docker-compose 的方式部署wakatime-sync服务,我自己用的是宝塔,步骤如下:
1、在数据库中新建wakatime数据库,导入项目sql目录下的文件创建对应的数据表。

2、在宝塔中,按照 docker -> compose模版 -> 添加的步骤,将yml复制进去,修改对应的 WAKATIME_APP_KEYFTQQ_KEY(需要去sever酱官网>注册获取),配置数据库的公网地址、端口号、账号和密码后,点击确定后保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3"
services:
wakatime-sync:
image: wf2311/wakatime-sync:1.0
container_name: wakatime-sync
environment:
- JAVA_OPTS=-Xmx256m -Xms64m -Xss256k
- SERVER_PORT=3040
- WAKATIME_APP_KEY=<WAKATIME_APP_KEY>
- WAKATIME_PROXY_URL=false
- WAKATIME_FTQQ_KEY=<WAKATIME_FTQQ_KEY>
- WAKATIME_DINGDING_KEY=<WAKATIME_DINGDING_KEY>
- START_DAY=2016-02-01
- MYSQL_URL=jdbc:mysql://<ip:port>/wakatime?characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=PRC
- MYSQL_USERNAME=wakatime
- MYSQL_PASSWORD=123456
volumes:
- ~/Share/logs/wakatime-sync/:/application/logs
ports:
- "3040:3040"

3、点击 compose -> 添加compose项目,选择对应模版后点击添加,再查看容器列表,确定镜像是否启动,正常情况下,每天早上9点就会推送昨天的wakatime数据。

如果docker日志中出现 unknownhost 的报错,请注意配置服务器的host,在/etc/host文件中添加对应的ip,之后刷新DNS。比如:
143.198.244.187 wakatime.com
49.233.102.57 sc.ftqq.com

建议使用docker-compose的方式
个人使用docker run的命令一直报错,手动建文件夹给777都没用,使用docker-compose.yml直接成功🎉🎉🎉

1
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/root/logs/wakatime-sync" to rootfs at "/application/logs": open o_path procfd: open /var/lib/docker/overlay2/c249cef5b49bbe5e8395baf3618bd7dcdc995741016f2da57cc055734002d6be/merged/application/logs: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

参考链接

github主页美化使用css

问题描述

我在我的主页上画了一个盒子,但是提交后盒子的代码以文本显示,没有渲染出来。

解决方案

1、将盒子的style转换成svg,以引入图片的方式解决渲染问题

1
2
3
4
5
6
7
8
9
10
11
12
13
<svg fill="none" viewBox="0 0 800 200" width="100vw" height="180" xmlns="http://www.w3.org/2000/svg">
<foreignObject width="100%" height="100%">
<div xmlns="http://www.w3.org/1999/xhtml">
<style>
<!-- 粘贴你的样式 -->
</style>

<div>
<!-- 粘贴你的盒子 -->
</div>
</div>
</foreignObject>
</svg>

在readme文件中插入这个svg图片(header.svg)

1
2
3
<div>
<img src="./header.svg" width="800" />
</div>

2、将盒子中的图片链接替换为base64,解决无法加载的问题

1
2
3
Refused to load the image because it violates the following Content Security Policy directive: "default-src 'none'"

Blocked script execution in because the document's frame is sandboxed - Angular application

参考链接

合并CI中的shell命令

书接上回,gitlab自动构建后,配置镜像对应的启动参数,补充对应的算法、垃圾回收日志、agent探针和对应debug模式参数配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
FROM openjdk:8-jdk
ENV BASE_DIR="/app"
WORKDIR $BASE_DIR

ENV JAVA_HOME="/usr/local/openjdk-8/" \
JAVA="/usr/local/openjdk-8/bin/java" \
JVM_XMS="8g" \
JVM_XMX="8g" \
JVM_XMN="3g" \
JVM_MS="128m" \
JVM_MMS="320m" \
HUSSAR_DEBUG="n" \
SW_AGENT="y" \
SW_AGENT_PATH="/home/skywalking/agent/" \
TZ="Asia/Shanghai"

RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone

#install linux command tool
RUN apt-get update \
&& apt-get install -y vim \
&& apt-get install -y sudo \
&& apt-get install -y nicstat \
&& apt-get install -y sysstat \
&& apt-get install -y inetutils-ping \
&& apt-get install -y net-tools \
&& apt-get install -y telnet

# 只复制一次 减少构建层数
COPY ./target/test-application.jar ./startup.sh $BASE_DIR/
EXPOSE 7778

RUN chmod +x startup.sh

#RUN mkdir -p $SW_AGENT_PATH
#COPY agent $SW_AGENT_PATH

ENTRYPOINT ["sh","startup.sh"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/sh
#===========================================================================================
# JVM Configuration
#===========================================================================================
# 内存分配参数
JAVA_OPT="${JAVA_OPT} -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}"
# debug 模式下参数配置(传输、端口号、调试服务器、不在 JVM 启动时暂停,而是等待调试器连接后再开始执行。)
if [ "${HUSSAR_DEBUG}" = "y" ]; then
JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=12345,server=y,suspend=n"
fi
# 异常处理机制 及 禁用大页面
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

#===========================================================================================
# Setting skywalking-agent properties
# agent 探针
#===========================================================================================
#if [ "${SW_AGENT}" = "y" ]; then
# JAVA_OPT="${JAVA_OPT} -javaagent:${SW_AGENT_PATH}/skywalking-agent.jar -DSW_AGENT_NAME=${SW_AGENT_NAME} -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=${SW_AGENT_COLLECTOR_BACKEND_SERVICES}"
#fi

# 垃圾回收 日志 轮换文件大小限制
mkdir -p "${BASE_DIR}/logs" && touch "${BASE_DIR}/logs/gc.log"
JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"

# 配置文件编码 Redis等ip和密码 启动jar包
JAVA_OPT="${JAVA_OPT} -Dfile.encoding=utf-8"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/test-application.jar"

echo "This server is starting, you can docker logs your container"

#if [ ! -n "$WAIT_HOSTS" ]; then
# echo "WAIT_HOSTS is not set!"
#else
# ./wait
#fi

echo ${JAVA_OPT}

exec $JAVA ${JAVA_OPT}

Syntax error:end of file unexpected(expecting “then”)

编写dockerfilestartup.sh文件时windows和linux下换行符冲突的问题;构建镜像时ENV配置错误