2014年6月

supervisor的管理下运行nodejs

背景

supervisor的管理下运行ruby,也是服务的迁移。

而supervisor管理的时候是不会加载/etc/profile的,所以要手动指定环境变量。

解决

设置环境变量

cat /etc/supervisord/htaccess.conf

[program:htaccess]
directory = /data/thrift/Rewrite2Nginx/Server
command = /usr/local/node/bin/node Server.js
environment = NODE_PATH=/usr/local/node/lib/node_modules

supervisor的管理下运行ruby

背景

上周六,准备从杭州去苏州的时候,坐在咖啡馆开始了 tool.lu 的迁移(美国VPS -> 阿里云)。

就在对 ruby工具 后台服务迁移的时候,supervisor管理的ruby服务就是起不来。

解决

一般情况下,我们会这样:

which ruby
# /usr/local/rvm/rubies/ruby-1.9.3-p545/bin/ruby

事实上,上面的路径在美国的VPS上是好的,但是迁到阿里云上的时候就出了问题,最后将ruby的路径改为了wrappers下面的,问题便圆满解决了!
cat /etc/supervisord/ruby.conf

[program:ruby]
directory = /data/thrift/RubyBeauty/Server
command = /usr/local/rvm/wrappers/ruby-1.9.3-p545/ruby /data/thrift/RubyBeauty/Server/Server.rb

php中nbsp的trim

non-breaking space

此处所指的nbsp是实体,而不是nbsp四个字符

$str = " abc"; 
$converted = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
var_dump($converted); // 这儿才是要处理的字符串,上面的都是准备工作

在处理此问题的时候,经历了一番波折,先是var_dump出来,但是和正常的字符串无异。
后来又使用escape尝试输出,发现是\xa0,于是就想trim($converted, "\xa0"),无果。

最后在php手册的trim函数下的第一个评论发现了解决方案。

var_dump(trim($converted, chr(0xc2) . chr(0xa0)));

分析某手机号码归属地储存结构

逛v2ex的时候看到个手机号码归属地的开源项目,于是便分析了一下他的数据文件结构,与纯真IP数据库的结构无异。

lovedboy/phone

phone.dat

+------------------------------------+
| version(4 char) | start index(int) |
+------------------------------------+
                            |
                            v
                  +------------------------------------------------+
                  | phone(int) | record offset(int) | corp(1 char) |
                  +------------------------------------------------+
                                          |
                                          v
                  +------------------------------------------------+
                  | record detail                                  |
                  +------------------------------------------------+

与垃圾评论的斗争

我确定我不会和某大厂的员工一样把重要信息写在里面,所以相关参数需要替换一下

# 取出垃圾评论的IP,并从数据库删除
mysql -u[mysql用户名] -p[mysql密码] --database=[typecho数据库] -e "SELECT DISTINCT ip FROM tp_comments WHERE status='spam'" --batch --skip-column-names >> banned_tmp.txt
mysql -u[mysql用户名] -p[mysql密码] --database=[typecho数据库] -e "DELETE FROM tp_comments WHERE status='spam'"
# 阻止ip
cat banned_tmp.txt | while IDF= read -r ip; do /sbin/iptables -I INPUT -s "$ip" -j DROP; done
# 保存路由
service iptables save
# 输出所有blocked ip
sed -n "/-j DROP/p" /etc/sysconfig/iptables | cut -d' ' -f4 | cut -d'/' -f1 > banned.txt

[Laravel4] Eloquent with的错觉

$categories = \Category::with(array('posts' => function ($query) {
    return $query->orderBy('created_at', 'desc')->take(10);
}))->get();

这样的相对语义化的写法很容易让人错误的以为会对每个分类下取10篇文章,而事实上是总共取10篇文章

QQ20140601-1.png