发表于2011年10月9日
假设每一条记录有一个叫做pv的整数字段,求整个集合中这个字段的和可以用如下方法:
> use test
switched to db test
> db.statistics.insert({created_on: "2011-10-01", pv: 100})
> db.statistics.insert({created_on: "2011-10-02", pv: 200})
> db.statistics.insert({created_on: "2011-10-03", pv: 300})
> var reduce = function(key, values){
... var count=0;
... values.forEach(function(v) {
... count+=v.pv;
... });
... return {count: count};
... };
> var s = db.statistics.find();
> reduce("total_pv", s);
结果如下:
标签: MapReduce, MongoDB, NoSQL | 没有评论»
发表于2011年9月26日
准备只保留 (sunliwen.com) 这一个域名,但因为有些外链,所以加一条rewrite来兼容。
# Redirect all requests to sunliwen.com
if ($host != sunliwen.com) {
rewrite ^(.*)$ http://sunliwen.com$1 permanent;
}
参考:
标签: Nginx, Ops | 2条评论 »
发表于2011年9月18日
把VPS的Lenny5换成了Ubuntu10.04,借这个机会试一下效率更高的 PHP-FPM 。
以下是fabric脚本:
def init_nmp():
install_nginx()
install_php()
install_phpfpm()
def install_nginx():
sudo("add-apt-repository ppa:nginx/stable")
sudo("apt-get update")
sudo("apt-get -y -q install nginx-full nginx-common")
def install_php():
# More packages upon request
sudo("apt-get -y -q --force-yes install php5-cli php5-cgi php5-mysql")
sudo("apt-get -y -q --force-yes install php5-mcrypt libmcrypt mcrypt")
def install_phpfpm():
# TODO: use canonical php-fpm package when available
sudo("add-apt-repository ppa:brianmercer/php")
sudo("apt-get update")
sudo("apt-get -y -q install php5-fpm")
在/etc/php5/fpm/php5-fpm.conf里将tcp修改成unix socket方式,单机情况下性能更好。
listen = /var/run/php5-fpm.sock
;listen = 127.0.0.1:9000
Nginx里的配置:
location ~ \.php$ {
try_files $uri = 404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
标签: Nginx, Ops, PHP, Python, Ubuntu | 没有评论»
发表于2011年9月15日
把Nginx放在Mecurial前面,提交的Changeset太大,会如下错误
HTTP Error 413: Request Entity Too Large
解决方法,改变Nginx对post数据大小的限制,调大server的client_max_body_size属性
server {
client_max_body_size 50M;
# ...
}
重启nginx。
标签: HTTP, Mercurial, Nginx, Ops | 没有评论»
发表于2010年7月6日
不知道什麼原因路由器裡修改過的配置都被抹掉了。那晚打雷,還停電了…
-----------------
2007年中文網誌年會,我狗屎運的得了一個很漂亮的La Fonera 2100路由器,一直用著沒出啥問題。

有一天我去網通網站隨便看看,突然測試強迫症發作,想試試修改ADSL用戶名。網通規定修改用戶名時,新用戶名必須以“*” – 星號開頭。改唄,貌似也沒啥,然後杯具就發生。發現路由器配置頁面的表單是不允許輸入星號的。-_-! 打電話給網通,編個故事說,帳號被已經搬走且反目的同屋修改,自己不知道現在該怎麼登陸,請求恢復成默認的帳號密碼。答覆是,Windows下沒有問題,其他環境,比如路由器網通不提供支持。-_-!
Linux裡撥號是可以寫星號的,因為只是個文本配置文件。但我不能只讓這一台電腦上網其啊。
La Fonera支持被刷。如果能登陸進去,手動改改配置文件,即可更自由。
重啟後,長按Reset的方法,試了很多次也不管用。很難過,開始考慮是不是去買個新的支持OpenWRT的路由器。放棄之前還是賭一把,弄根串口線刷刷看。試了幾根手機線做的usb-serial後,都沒成功。我就不信了…從淘寶買了一根PL2303的連接線,絕對環保,沒有外殼,電路板和芯片都裸在外面。一頓折騰後,我的路由器終於又可以撥號了。
網通會生氣吧。:D
這次記錄步驟如下:
1. 驅動
Mac OS X版的PL2303驅動在這裡下載。安裝方法試將解壓縮得到的.kext目錄拷貝到/System/Library/Extensions目錄下,重啟。
連接線接上後,應該會出現一個/dev/tty.PL2303-xxx文件。
Windows版本可在這裡找到,Windows 7下可以用,不知道別的Windows能用不能。如果不能,可參考這個帖子。如果驅動與Windows版本不一樣,會有啟動不了設備的問題出現。但基本只要找到相應的PL2303驅動即可。
2. 終端連接串口
具體連接方式,請看 http://66.49.218.210/?p=10 。
3. 用終端程序連接
我以前用的是Windows下的hyperterminal。
這次用的screen,啥設置都不需要做竟然就可以用了。
一定要先把連接線USB端接電腦,否則電腦沒有/dev/tty.PL2303-xxxx的設備沒法開終端等著。
如果發現不能啟動,可以先將TX線拔掉,通電後迅速插上。成功啟動的話會顯示如下信息。
+PHY ID is 0022:5521
Ethernet eth0: MAC address 00:18:84:16:74:78
IP: 0.0.0.0/255.255.255.255, Gateway: 0.0.0.0
Default server: 0.0.0.0
RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version v1.3.0 - built 16:57:58, Aug 7 2006
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
Board: ap51
RAM: 0x80000000-0x81000000, [0x80040450-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 1.000 seconds - enter ^C to abort
RedBoot> fis load -l vmlinux.bin.l7
...(略)...
Please press Enter to activate this console.
...(略)...
看到
Please press Enter to activate this console.
便可按回車鍵激活終端。
4. 修改配置
BusyBox v1.1.3 (2006.11.21-19:49+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ _______ _______
| ____|| || _ |
| ____|| - || | | |
| | |_______||__| |__|
|___|
Fonera Firmware (Version 0.7.1 rev 1) -------------
*
* Based on OpenWrt - http://openwrt.org
* Powered by FON - http://www.fon.com
---------------------------------------------------
root@OpenWrt:/#
後面的操作,參考這篇文章。
主要步驟有,啟用dropbear來做SSH服務器
root@OpenWrt:/# mv /etc/init.d/dropbear /etc/init.d/S50dropbear
編輯/etc/firewall.user文件
root@OpenWrt:~# vi /etc/firewall.user
在firewall.user裡啟用下面兩行iptable命令,允許訪問22端口。
### Open port to WAN
## -- This allows port 22 to be answered by (dropbear on) the router
iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT
重啟。可以ssh到路由器了。
編輯/etc/config/fon文件
root@OpenWrt:/# vi /etc/config/fon
主要修改如下信息
config network wan
option mode 'pppoe'
option username '_username_'
option password '_password_'
修改局域網的網段,默認為192.168.10.1/255.255.255.0 ,我改成了如下樣子。
config network lan
option mode static
option ipaddr '10.10.10.1'
option netmask '255.255.255.0'
option dhcp '1'
默認用戶名密碼,都是admin/admin。admin也就是root,用passwd命令可以修改。
重啟。搞定,又可以在家wifi了。
标签: Linux, 玩意 | 1条评论 »