榕城走一回

应客户之邀,本周一到福州做业务需求调研,周三返回沈阳。

以前从未去过榕城福州,领导下达调研任务时已是上周五。时间比较仓促,而且要求周一上午务必到达福州,因为客户方领导都较忙,也只有在周一才有机会见到客户领导。

安抚了LP后,周日下午我背上本子,带了几件随身衣物,就匆忙赶往机场。从沈阳出发到福州的航班都是有经停的,而且多是厦航、川航这样的小航空公司。为了能多陪LP一会儿,我选择了起飞较晚的航班,计划晚上22点到达福州。但是人算不如天算,航班晚点,周一凌晨1点才抵达福州长乐机场。在机场等飞机那是何等的煎熬,还好我随身带了一本《怪诞心理学》可以帮我打发时间。

此时的北方已进入深秋,夜晚温度近零度,但榕城却仍旧是一片温暖和煦,下飞机时机场地面温度依然有20多摄氏度。福州长乐机场距离市区较远,估计是我到过的城市里机场离市区最远的了。乘机场大巴用了将近一个多小时才到达终点(阿波罗大酒店)。打车到达闽江饭店Checkin时已是凌晨2点半了。走进房间后竟全无睡意,但想到白天还要到客户那开会,还是强迫自己入睡。

早上七点醒来,头有些痛,显然这短暂的睡眠还不能缓解我身体的疲劳。酒店提供早餐,早餐品种还算丰富,就是味道清淡了些,让我这个习惯了浓重口味的北方人有些不适^_^。和当地办事处的同事约好时间,上午做内部讨论,下午再去见客户。上午9点走出酒店,第一次清晰的看到榕城的闹市景象。和大多数省会城市一样,高楼大厦,繁忙喧嚣。瞥了一眼马路上的情况,看得出福州堵车也很严重^_^。既然福州号称榕城,那自然少不了榕树,我是不认识榕树的,但是猜也猜得出,大街两旁矗立的那些枝叶繁茂、树冠巨大的树肯定就是榕树了。

和北方相比,这里简直就是夏天,大街上男女老幼均是半袖裙子打扮,我也“入乡随俗”,脱去了厚重的外套,穿上了半袖衬衫。公司的办事处离酒店很近,走路也就5分钟,工作内容这里就不多说了。中午办事处领导在港式茶餐厅请客,这也算是入榕城后的第一顿饭了,遗憾的是少了些许本地菜的特色。席间听同事谈福州的房价,才知道福州房价要比沈阳高出一倍多,均价估计要上万,这在国内省会级城市里也算是排在前列的了。

下午见客户,途中路过闽江,江不宽,但却不失忙碌,闽江两旁码头林立,闽江中央船只往复。很想驻足欣赏,但无奈有公务在身^_^。

从客户那开完会出来已是华灯初上。同事带我去了一家当地特色的饭店吃了一顿牛排,这个牛排不是西餐中的那种烤牛肉,而是原生的牛排骨,一碗鲜美的汤中泡着两块包裹着厚实牛肉的牛排骨。以前从未这么吃过牛肉,这还是第一次,据同事介绍这家店里的牛肉是正宗的当地“达道牛肉”,肉质的确很嫩。

我有一个喜好,就是每到一地必到当地的博物馆,但是这次估计是真的没有时间了,因为周二有很多资料要准备,索性就在酒店里闷了一天。晚上出来随意到了一家小店吃了一口,然后在酒店附近转了转。福州的街道环境卫生一般,马路上街道旁可见随意丢弃的废物,很多国内城市(包括沈阳)也是这个样子。福州的电动自行车很多,起码比沈阳要多,每到饭点儿,在各家饭店门口你会看到一排排的电动车。福州的物价倒是不低,在超市里逛了逛发现无论是菜价还是水果价格都不在沈阳之下,甚至一些南方水果的价格也不低。

周三上午到客户现场与客户再次开会,就周一会上的一些问题和需求做应答。下午一点坐大巴赶往机场,三点的厦行航班居然又晚点了近一个小时。更可气的是经停南京时由于航空管制,竟坐在飞机上等了近一个多小时。回到家里已经是晚上10点多了。一进门,LP正坐在沙发上等我吃晚饭呢,那时那刻,心里美滋滋的。这两天发现自己的脸摸起来很顺滑儿,估计用福州的水的功劳,福州的水水质较软。

之前一直认为福州是个内陆临江城市,但是今天看了Google地图才发现原来福州机场东测就是大海。这次榕城行真是太匆忙了,甚至没有留下一张照片,下次有机会有时间一定细致“挖掘”一下福州。

有些像流水帐^_^。

Review Board中文支持

Review Board安装成功至今已半月有余,这期间我一直在试用它,虽欣喜于其提供的强大的功能,但还是有若干使用中的问题一直让我头痛不已,同时也阻碍了在部门推广该工具的进程。

首当其冲的就是对中文的支持问题。按照默认的步骤安装和配置后,
输入和保存英文均没有问题,但是一旦输入中文,保存后页面显示的都是乱码,甚至某些时候在保存中文数据时Review Board还提示错误。我的
Ubuntu的locale是"zh_CN.UTF-8",输入法输入后的中文内码应该是UTF-8。Review Board本身按理来说其内核也应该是
内置支持的UTF-8编码的,问题出在哪呢?答案是MySQL。

在命令行模式进入MySQL,敲入status命令:
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1


们看到MySQL当前的四大字符集默认都是latin1,而创建reviewboard数据库时使用的语句又没有指定编码,这样一来
reviewboard数据库和其中表的编码应该都是按照MySQL默认字符集编码(即latin1)创建的,这应该就是中文乱码的根源吧。

修改MySQL默认字符集的方法很简单,先停止MySQL Server(sudo /etc/init.d/mysql
stop),之后打开/etc/mysql/my.cnf,分别在[client]和[mysqld]两个section下,增加一个key-value
pair: default-character-set = utf8,保存后退出。启动MySQL(sudo /etc/init.d/mysql
start),用status命令查看,你会看到所有characterset都已经变成了utf-8:
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8

但是这个设置对已经创建完的reviewboard数据库和相关表不会起作用。由于对MySQL不甚熟悉,所以没有尝试去转数据库和表的编码,而是尝试重新创建一套库。这次在创建库的时候为了以防万一,我加上了显式的字符集编码要求。

mysql> create database reviewboard_utf8 default charset utf8 collate utf8_general_ci;
mysql>
grant all on reviewboard_utf8.* to 'reviewboard'@'localhost';  /*
前一个reviewboard_utf8是新建的数据库的名字,后一个reviewboard则是之前创建的访问数据库的用户名 */
Query OK, 0 rows affected (0.00 sec)
mysql> exit

数据库reviewboard_utf8默认是utf8编码,则系统默认其中创建的表也都是utf8编码。下面的问题就是如何将ReviewBoard与新库reviewboard_utf8连接起来的问题了。以下步骤供参考:
1、sudo vi /var/www/reviewboard/conf/settings_local.py,修改其中的DATABASE_NAME为reviewboard_utf8;
2、sudo rb-site upgrade /var/www/reviewboard,这个步骤中rb-site会在新库reviewboard_utf8中重新创建ReviewBoard需要的各个表
3、重启apache2 server,sudo /etc/init.d/apache2 restart


你再次打开ReviewBoard的首页面时,你会发现一切从头开始了。上面的"换库"操作中,rb-site只是创建了新表,表里并未有任何数据,这与
首次安装ReviewBoard时rb-site帮你创建了一个超级用户是不同的。所以我们这里需要手动做这件事。首先通过页面Register一个帐
户,比如就叫做admin吧。创建后用admin帐户登入,你会发现页面右上方的缺少了'Admin'这个链接选项,你无法通过'admin'用户对
ReviewBoard进行设置,也无法设置用户的权限。这里就需要在数据库中作些手脚了:

mysql> use reviewboard_utf8;
mysql> update auth_user set is_staff = 1 where username = 'admin';

这里is_staff的值决定该用户是否有权限对ReviewBoard站点进行设置。你再刷新一下页面,就会发现右上方出现了一个‘Admin'的链接了。做了上面的工作后,我们尝试在各个页面输入中文并保存,这次中文保存和显示都变得正常了。

在使用ReviewBoard过程中的第二个"问题"其实严格来说是我们自己的问题。我们已有的代码都是在Unix
GBK环境下开发的,所有源代码文件都是以GBK编码格式存储的。这样一来一旦你提交了这些源文件的diff,在ReviewBoard中'View
Diff'时看到的中文全是乱码,更严重的是某些时候ReviewBoard显示的代码差异的位置与真实代码修改的位置不符。比如我在第1000行
增加了一行: i += 1; 提交diff后,ReviewBoard显示的第1000行根本不是i +=
1这行代码,而是之前的若干行甚至是十几行、几十行。我怀疑是我们源代码文件的GBK编码导致ReviewBoard判断出现了错误。我尝试将源码重新以
UTF-8格式保存了一下,并重复上面的修改,提交diff,这回ReviewBoard的View
Diff则完全正确,源码文件中的中文注释显示的也很正常。

再有一点就是Review Board的Mail通知设置问题,公司采用SSL
加密mail,ReviewBoard仅支持TSL,在网上查了一下这两个协议应该是可以兼容的,但是设置后就是无法将mail发送出去。突然想起来公司
似乎还发布了一个数字证书 for mail
client端使用,也许可能是这个原因导致Review Board无法发送Mail,还待继续研究^_^。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats