2014年4月

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踩坑记(一)的回复

对于Nginx踩坑记(一),在openresty的google group上提了个问题:ngx.exec是如何处理上层定义的变量的

春哥的回复摘录如下:

你这里使用了 rewrite 配置指令来发起内部跳转。其实 rewrite 指令发起的内部跳转非常特殊:它不会从
server-rewrite 阶段重新开始运行,而是从 find-config 阶段开始执行,所以你上例中写在server {}
块中的“set $hello hello”并不会在跳转后重新运行一遍,因为 server-rewrite 阶段在跳转后被直接跳过。

注意,rewrite 配置指令的特殊行为也可以通过下面这一行 ngx_lua 配置来复现:

 rewrite_by_lua 'ngx.req.set_uri("/test2", true)'; 

而ngx.exec() 调用(以及其他接口,比如 echo_exec 配置指令)发起的内部跳转的标准行为是从 server-rewrite
阶段重新开始执行,所以你的“set $hello hello”会被重新执行一遍,从而改写掉 $hello 变量原先的取值(即"bye")。

我或许应该在教程里强调一下这个重要细节 :)

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客户端查看日志时,即使当前工作目录版本是某个历史版本,也能看到最新的版本记录情况。

- 阅读剩余部分 -

程序员中的标杆人物-章亦春

这标题,怎么读着这么别扭。

接触开源软件这几年,不知不觉形成了一种印象,大牛一般都是有性格有棱角的,传说中的神人如Linus就不用多说了,身边的同学和同事中,技术牛人性格也一般比较桀骜。桀骜的表现之一就是不会浪费时间去回答一些基本的问题,最著名的就是那篇流传已久的论坛发帖指南了吧。

自己虽然算不上牛人,但在某些方面也会有同事来求助,碰到一些比较低端的问题,其实心里会有烦躁的。烦躁的程度与当时的心情、手里有多少活正在干等因素相关。

直到有一天我接触到了章哥。

章哥是同行对章亦春的尊称,我也无缘与章哥真正面对面接触,但文如其人,阅读他的博客,他写的文档,以及在论坛中对人的回复,就可以肯定他有着一般技术人难以企及的修养。

- 阅读剩余部分 -