Zeka 的记事本

2021 年 8 月
记树莓派奇怪的 “定时断网”
2021827 日说: Linux

树莓派莫名奇妙断网,而且时间非常有周期性,为 12h。

这与 DHCP 租约时间很符合,因此猜测是否是 DHCP 客户端出现了问题。但是对树莓派网络软件不够了解,于是在论坛上面找到了 这个帖子 解决了问题。

树莓派轻量包默认没带 NetworkManager,而是使用 dhcpc 作为 dhcp 的客户端, 使用 systemctl status dhcpcd 查看 dhcpcd 的状态,果然发现它挂了。于是在 12h 后 dhcp 租约过期,自然而然挂了。

github 上有 相关 issue,说明原因为树莓派上跑的容器太多,而每个容器都要分配网络,导致 dhcpcd 承受不住挂掉。

最简单的修改方法为在 /etc/dhcpcd.conf 文件下加上 denyinterfaces veth* 这一行,然后重启 dhcpd 服务。因为 docker 的网络与宿主机的 dhcpcd 无关,所以 dhcpcd 完全不需要介入 docker 虚拟出来的接口。

使用 njs 实现简单反向代理 API
2021812 日说: Nginx

之前一个 API 是部署在 CloudFlare Worker 上的。原则上是反向代理,但是由于逻辑是首先 await fetch 完成再返回,导致响应比较慢。

正好前几天页面挂了,趁着修补页面的机会顺便修改了一下。不过这次不打算使用 Worker,而是试试 njs。也就是在 Nginx 上部署 Javascript。

之前使用的 Nginx 镜像其实是 OpenResty,但是由于一直对 lua 了解不足,导致虽然安装了,但是没有写过相应脚本。

OpenResty 镜像中似乎没有 njs 模块废话,所以要使用首先需要切换到 Nginx 镜像。

脚本很容易:

js_import path/to/scripts/script_name.js;
js_set $rev_name script_name.funcName;

server{
  ...
  location /path {
     proxy_pass $rev_name
  }
}
const funcName = () => {
  ...
  return url;
};

export default {funcName}

在函数体中就能随意修改逻辑了。

为 Webstorm 添加 Liquid 语法支持
202186 日说: IDE

jekyll 默认在 HTML 中启用 Liquid 语法,为了获取语法高亮支持,我们需要安装 Liquid 插件。

或者直接使用 RubyMine 开发,其自带 Liquid 插件。

根据 官方插件说明,它不会识别 *.html 文件。所以我们仍然无法得到语法高亮支持。

要使 HTML 文件也用上高亮,我们在 Settings>Editor/File Types 中找到 Liquid,并添加规则 *.html。Webstorm 会提示这与 HTML 冲突,但是没关系,因为 Liquid 似乎是 HTML 的一个超集,所以我们将声明改到 Liquid 后不会影响 HTML 的高亮。

之后就能正常使用高亮了。