Error: Can't set headers after they are sent


NodeJS 启动,出现如下报错。

Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/server/node/opstools/node_modules/express/lib/response.js:700:10)
at ServerResponse.send (/server/node/opstools/node_modules/express/lib/response.js:154:12)
at fn (/server/node/opstools/node_modules/express/lib/response.js:934:10)
at View.exports.renderFile [as engine] (/server/node/opstools/node_modules/ejs/lib/ejs.js:353:10)
at View.render (/server/node/opstools/node_modules/express/lib/view.js:93:8)
at EventEmitter.app.render (/server/node/opstools/node_modules/express/lib/application.js:566:10)
at ServerResponse.res.render (/server/node/opstools/node_modules/express/lib/response.js:938:7)
at /server/node/opstools/app.js:43:9
at Layer.handle_error (/server/node/opstools/node_modules/express/lib/router/layer.js:58:5)

阅读全文

NodeJS 我只需要一个店小二


美丽的七侠镇上有一条美食街,很多著名的饭店都开在这里,有老字号的 Apache、PHP, 最近几年火热的 Ruby on Rail,还有那些重量级的餐饮集团 Websphere、Weblogic 等。
这些饭店老板根据自己的实力,或多或少的雇佣了一些店小二来招待来客,这些小二干活都非常殷勤,没有一个偷懒耍滑,把顾客招待的舒舒服服,所以平日里饭馆运转的还不错,相安无事。
但是随着《武林外传》的拍摄和播放,七侠镇旅游业大爆发,游客像潮水一样蜂拥而至,现有的店小二招待不过来了,到了饭点,每家的门前都排起了长队,游客们吃不上饭,个个怨声载道。
看到这种情况,有些老板咬了咬牙,在人工费不断上涨的情况下,多雇了一些小二来帮忙,无奈总是赶不上顾客增长的速度。
某一天有个美国老外来到七侠镇上旅游,也看到了吃不上饭的问题,他仔细分析了一番后发现了一个秘密:原来这些店都采用了同一套叫做“全程贴心服务”的模式,这个模式很有意思:客人来了以后,马上有个店小二殷勤迎上去,带着找座位,点菜,给后厨下单。由于后厨做菜需要很长时间,店小二就在客人的旁边等着。后厨一摇铃铛,大喊一声:上菜,店小二马上端到客人面前,然后站在一边等着客人吃完。客人说:结账,小二收钱,找钱,送客,迎接下一位。通常这个时候门口都排成了好几百人了!
这个 VIP 服务实在是太贴心了!导致的结果很明显,饭店有几个店小二,就只能同时接待几个顾客。
老外一声不吭的回去了。
过了几个月,美食一条街上出现了一个巨火无比的饭馆:NodeJS
虽然这个饭店中人满为患,可门口竟然没有排队的!
更让人吃惊的是,这个店里声称:我只需要一个店小二。










阅读全文

折腾的博客


经过进一个月的折腾,博客终于稳定了下来。
由于这学期学习比较紧张,所以基本没有什么时间继续做论坛。
博客也准备重做了,前几天关掉了论坛,以后就以更新博客为主。
博客由 wordpress 升级到了 typecho。
typecho 没有了 wordpress 那样臃肿,小清新的风格,超简洁,我很喜欢。
博客换了新服务器,也加了 cdn,这样访问速度也能快一点。
准备把博客一直写下去。
慢慢坚持。
分享一些自己的生活经历,以及一些计算机方面的资料。
欢迎大家关注。

阅读全文

Puppet 推送文件测试


创建模块目录结构

[root@lost1 modules]# tree /etc/puppet/modules/
/etc/puppet/modules/
└── push
    ├── files
    │   └── puppet-test
    ├── manifests
    │   └── init.pp
    └── templates
4 directories, 2 files

阅读全文

Puppet 证书管理


查看证书。

[root@lost1 ssl]# puppet cert --list --all
+ "lost1.com" (SHA256) 63:6B:DE:7E:E6:DA:68:71:90:23:42:64:19:9F:A1:36:B7:14:D8:56:3C:8E:AD:C9:E9:2E:DC:4E:81:FF:33:8F (alt names: "DNS:lost1.com", "DNS:puppet", "DNS:puppet.com")
+ "lost2.com" (SHA256) 56:BE:3A:B5:6C:5C:73:7E:31:0C:30:88:49:3E:9D:E5:37:D1:61:F9:C4:6C:66:75:46:0D:6A:4B:6D:8D:A6:99
+ "lost3.com" (SHA256) 8F:53:A5:BC:1E:BA:11:DF:AB:8E:86:C3:C9:5E:9C:F4:F2:67:E6:76:EA:E5:58:13:2D:B2:39:12:79:66:F2:A3

撤销证书。

[root@lost1 ssl]# puppet cert revoke lost2.com
Notice: Revoked certificate with serial 4
[root@lost1 ssl]# puppet cert --list --all
+ "lost1.com" (SHA256) 63:6B:DE:7E:E6:DA:68:71:90:23:42:64:19:9F:A1:36:B7:14:D8:56:3C:8E:AD:C9:E9:2E:DC:4E:81:FF:33:8F (alt names: "DNS:lost1.com", "DNS:puppet", "DNS:puppet.com")
+ "lost3.com" (SHA256) 8F:53:A5:BC:1E:BA:11:DF:AB:8E:86:C3:C9:5E:9C:F4:F2:67:E6:76:EA:E5:58:13:2D:B2:39:12:79:66:F2:A3
- "lost2.com" (SHA256) 56:BE:3A:B5:6C:5C:73:7E:31:0C:30:88:49:3E:9D:E5:37:D1:61:F9:C4:6C:66:75:46:0D:6A:4B:6D:8D:A6:99 (certificate revoked)

阅读全文

Puppet 安装部署


清空 iptables 规则

vim /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

设置 ntp

[root@lost1 test]# ntpdate pool.ntp.org
24 Feb 11:24:55 ntpdate[2540]: step time server 202.112.29.82 offset -28798.519271 sec
[root@lost2 test]# ntpdate pool.ntp.org
24 Feb 11:25:00 ntpdate[2648]: step time server 202.112.29.82 offset -28798.248673 sec
[root@lost3 test]# ntpdate pool.ntp.org
24 Feb 11:25:04 ntpdate[3528]: step time server 202.112.29.82 offset -28798.070055 sec

阅读全文

Python 实现经典排序算法


插入排序:
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

def insert_sort(lists):
    count = len(lists)
    for i in range(1, count):
        key = lists[i]
        j = i - 1
        while j >= 0:
            if lists[j] > key:
                lists[j + 1] = lists[j]
                lists[j] = key
            j -= 1
    return lists

阅读全文