最近在写 Luadex 时,顺手就用 GNUMake 来做构建工具了——这样还能热热手把好久好久没用地 GNUMake 再捡回来。中间碰到一个问题,我需要动态地扫描出全部的某类型的文件,然后按照同样的规则进行处理。
至 LuaJIT-2.0.4 为止,tostring()
函数都只会检查并调用元表的 __tostring
函数。那么在面向对象式开发时,如何让基类定义地统一 __tostring
机制生效?
print(setmetatable({
__tostring = function ( self )
return '3'
end
}, setmetatable({
Nginx try_files
指令自实现之日启,风靡至今。单纯说功能实现地话,确实能够快速地适配各种需要场景,省掉了大段的 if
和 set
。但相应的 URL 拼写格式,就真地不忍直视了。
2016 年 11 月 21 日修订
REQUEST_METHOD
被改变地问题。
丢失的 301 跳转
2015 年 6 月 17 日之后,如果你是 Linux 用户,你可以使用 s6-linux-init 包来帮助你实现同样的目标!尽管如此,还是请你首先阅读本篇文档,以理解 s6-linux-init 的工作内容。
将 s6-svscan 用作初始进程是可行的。但这并不意味着你可以直接通过 s6-svscan 引导,因为它还无法胜任完整的初始化系统所应做地全部工作。正确地替换掉初始进程,还需要对其工作内容做更多地理解。
在我之前的博文中,我描述了我是如何在容器中使用进程管理器的,并做了一些展开。但我还是觉得有必要针对 Laurent Bercot 开发的 S6 做更详尽的说明。
什么用 S6 而不是 Supervisor?
作者 Hongli Lai 看着像是华人,可惜没找到文章的中文版本,于是就很土鳖地手翻了一遍。文章的措辞很口语化,因此意译为主。点击这里可以阅读原文。
Baseimage-docker 是针对 Docker 优化地 Ubuntu 最小化基础镜像。我们可以从 Docker 仓库中拉取回来作为基础镜像用在自己的镜像中。
笔者也算是 Docker 的早期使用者了,早在其 1.0 版本发布前,就已经将其用来做持续集成和构建开发环境了。因而,笔者才研发了 Baseimage-docker 以解决 Docker 工作模式中的一些问题,主要是子进程的“僵尸化”问题。
作者 Hongli Lai 看着像是华人,可惜没找到文章的中文版本,于是就很土鳖地手翻了一遍。文章的措辞很口语化,因此意译为主。点击这里可以阅读原文。
在构建 Docker 容器时,我们需要注意子进程的“僵尸化”问题(PID 1 Zombie Reaping Problem)。这会导致不可预知的和看起来匪夷所思的问题。本文解释了这个问题,也解释了如何去解决,并提供了一种预构建方案:Baseimage-docker 。
#!/bin/sh | |
# | |
# Proxy agent script, for 'ProxyCommand' directive in 'ssh_config'. | |
# | |
# Usage: | |
# ssh-proxy.sh <Origin Host> <Origin Port> [<Alternative Host> [<Alternative Port>]] | |
# | |
# Example: | |
# ProxyCommand ssh-proxy.sh %h %p ddns.host.name | |
# |