两只金鱼

最近家里来了两个客人:两只金鱼,一只白色的,一只红色的,我给他们分别取了个名字,小红与小白。于是每天早上出门前,给他们喂点食料,晚上回来后趴在鱼缸前跟他们说两声 Hello 成了我的一大乐趣。

几天之后,我发现,当我凑近鱼缸跟他们 say Hello 的时候,他们会慢慢的游到水面,露头吐出两个泡泡然后迅速沉入水底,仿佛一脸娇羞。

RPM 中的 %config 和 %config(noreplace)

打开一个 rpm spec 文件,在 %files 段有一个指令很常见:%config(noreplace),这个指定到底是干什么用的呢?

答案是,该指令决定如果一个文件被管理员修改过后,下次更新该文件所在的rpm包时,该文件的存在状态。例如,一般升级软件时,配置文件是不会变化的,而主程序则一般需要被升级(替换)。

对于 spec 文件中在 %files 段的某一个文件,我们要讨论三种情况:

  1. 没有带 %config 指令。例如:%{_sbindir}/redis-server
  2. 带了 %congfig 指令。例如:%config %{_sysconfdir}/redis/redis.conf
  3. 带了 %config(noreplace) 指令。例如:%config(noreplace) %{_sysconfdir}/redis/redis.conf

Nginx 踩坑记(一)

1. 预备知识

Nginx 有两种定义变量的方法,一种是在模块中定义,从而成为内建变量;另一种是在配置文件中通过 set 指令来定义。

配置过 Nginx 的同学可能都知道这样一个事实:一个请求在其处理过程中,即使经历多个不同的 location 配置块,它使用的还是同一套 Nginx 变量的副本。

例如,如果有如下的配置:

location /test1 {  
        set $hello hello;  
        rewrite /test1 /test2 last;

}
  
location /test2 {  
        echo $hello;  
}  

虽然变量是定义在 location /test1 中,但 Nginx 变量一旦创建,其变量名的可见范围就是整个 Nginx 配置,所以在 /test2 中直接使用该变量是不会报错的。另一方面,由于变量的生命周期是与请求相关的,所以如果直接访问 /test2,得到的变量 $hello 是一个空值,而访问 /test1,则会内部跳转到 /test2,将 /test1 中赋值的 hello 打印出来。

svn log 不显示当前提交

关于svn log,我之前的工作方式一般都是这样:

  1. 执行 commit 操作时,不限平台。一般提交代码,会在 Linux 工作环境下用 svn commit 命令,提交文档则是在 Windows 下用 TortoiseSVN 客户端提交。这主要是本着方便的原则,因为代码一般是在 Linux 下编辑和测试的,文档是在 Windows 下编辑的。
  2. 执行 log 操作时,在 Windows 下。使用 TortoiseSVN 查看版本日志以及各版本提交内容变化实在太方便了。

最近由于办公环境网络的变化,在 Windows 下无法用 TortoiseSVN 连接到仓库了,只能在 Linux 下进行。这样就无法在 Windows 下看版本日志了,好在也就只是一个 svn log 命令,简单明了。但使用中还是有一个要注意的地方。

在使用 TortoiseSVN 客户端查看日志时,即使当前工作目录版本是某个历史版本,也能看到最新的版本记录情况。