Shanghai on Rails举办第9次线下活动

成立于2007年10月的Shanghai on Rails是国内较有影响的一个Ruby on Rails社区,自成立之初起就坚持每个季度举行一次线下活动,5月21日下午在篱笆网举行的第9次线下活动吸引了众多Ruby爱好者,还有从杭州、无锡等地特意赶来的朋友。

\u0026#xD;\n

本次活动的第一个主题演讲是由QuickerBuy的CTO汪晓明(Bob Wang)带来的《通过QuickerBuy看Rails的电子商务应用》。Bob介绍了Rails相关技术在电子商务领域的应用,以及他们在开发过程中的一些实践。QuickerBuy也采用了目前流行的MongoDB,因为它使用简单,能方便地进行水平扩展,支持自动故障转移和自动分片,综合性能与功能等因素,他们从众多候选数据库产品中选择了MongoDB。但令人有些意外的是,QuickerBuy并没有用MongoDB来存储数据,而是将它当作一种分布式文件系统,用来存储大量的图片。他们通过CarrierWave这个Gem来写文件,随后直接用nginx-gridfs来读取文件,整个集群的性能表现还比较理想。

\u0026#xD;\n

QuickerBuy的系统中融合了很多流行的开源产品,比如使用nginx来接受请求,Passenger来运行Rails程序,Sphinx提供索引服务,使用Redis和MySQL相结合来存储数据。除此之外:

\u0026#xD;\n
  • 针对电子商务SNS化的发展方向,使用OmniAuth来做身份验证。\u0026#xD;\n
  • 为了提高订单转化率,在支付环节使用支持国内外多种第三方支付方式的ActiveMerchant来进行支付。\u0026#xD;\n
  • 通过state_machine来管理订单状态。\u0026#xD;\n
  • 使用基于Redis的delayed_job和resque来处理后台任务。\u0026#xD;\n
  • 使用Capistrano自动化部署。\u0026#xD;\n
  • 用Ruby来编写系统定时任务,然后通过whenever将其转换为cron任务。\u0026#xD;\n

网站上线之后,他们也遇到了很多问题。首先是网站迟迟不被搜索引擎收录,经过一番总结,发现了不少问题,比如站点导航信息缺失,没有完整的SiteMap,链接也不够完善等等。他们使用Tidy清理了不标准的HTML代码,改写了will_paginate生成静态的链接。为了掌握网站的运行情况,他们在监控方面也下了一些功夫,外部监控由适用于国内网络的监控宝和适用于欧美网络的Pingdom来实现;内部监控则使用了New Relic,它能够监控系统的每个动作、每条SQL。

\u0026#xD;\n

Bob建议大家要不断学习、善用工具、不断重构,例如可以多看RailsCast,多上Ruby Toolbox了解主流的插件情况,用Cerberus做持续集成,在decent_exposure的帮助下编写更好的Controller。还要将系统的优化做在前面,落实到日常中去,而不是等到系统大了才想起要合并压缩CSS、JS,这些都是最基本的,晚做不如早做。

\u0026#xD;\n

第二个主题演讲是由Ekohe的Maxime带来的《Rails as iOS Application Backend》,在过去的一年里,Ekohe开发了5、6个iOS应用,都是采用Rails来提供后端API的。手机端的应用通过基于HTTP、HTTPS协议的REST API与后端交互,使用的数据格式是JSON;另外也会调用Apple Push Notification Services来发送Push Notification。

\u0026#xD;\n

可以简单地把iPhone看做是一个浏览器,因为它能存储并使用Cookies,这样一来进行身份验证就非常简单了,请求时带上Cookies即可。在发送JSON请求时,iOS提供的NSURLConnection太过于底层,于是Ekohe自己开发了一套JSONRequest,其中处理了Cookies、HTTP重定向及HTTP异常等各种常见的问题。借鉴了Rails中的ActiveRecord,他们还开发了一套用于iOS的轻量级ORM框架,将JSON Web后端发来的内容转为对象,并开源了出来。虽然Rails自己提供了将Model转为JSON的功能,但是Maxime还是建议大家自己开发to_json方法,这样不仅可以定制自己的数据对象,还可以大大节省网络上的传输大小。对于Push Notification,如果用户允许应用发送Push Notification,那么会生成一个Token,可以将这个Token保存下来。然后结合Resque和apn_on_rails来批量发送Push Notification。发送时需要注意256字节的消息大小限制。

\u0026#xD;\n

主题演讲之后是本次活动加入的一个新环节――Lighting Talk,由众多短小的演讲串联组成,每位嘉宾就自己的话题做10分钟左右的演讲,内容非常广泛。吕戈的《The Fork of Truth》介绍了fork函数的各种优点――克隆子进程速度很快、CopyOnWrite等等;还介绍了一些使用fork()的成功案例,例如Redis使用fork()创建子进程dump内存中的数据。杨光在《Titanium Mobile Intro》中介绍了跨平台移动开发平台Titanium,它的优点是可以跨平台(iOS、Android和BlackBerry)、基于JS开发、本地App;但它也有一些缺点,比如开发资源不够丰富、自定义UI非常困难,还有就是需要通过代码来判断当前的平台。《Ruby on Shoes》中介绍了由_why开发的Shoes,这是一个Ruby的GUI工具,可以跨平台,具有元编程能力,非常适合开发原型系统。周亮为大家介绍了Jekll这个轻量级的基于Ruby的博客工具,如果你想写博客,但又不想自己搭建复杂的系统,就可以考虑Jekll来生成静态的博客;周亮表示自己的博客就使用YAML来编写配置,用Markdown写文章,通过Pygments对生成的静态HTML中的代码进行代码高亮,使用Disqus添加评论功能。

\u0026#xD;\n

来自薄荷网的Vincent介绍了他们在Percona方面的使用经验,之前使用MySQL 5.1.34时,数据库压力非常大,CPU使用率经常达到60%、Load Avg到8,在尝试了一些优化方法之后没有明显改善,随后他们切换到了Percona上,CPU使用率降低到了6%、Load avg降到了3;在官方的性能测试中,相比同版本的MySQL,Percona性能提升40%,并且表现得更加稳定,能更好地利用多核和多CPU,功能更加丰富。

\u0026#xD;\n

来自盛大创新院的庄表伟对最新上线的盛大开源平台SNDACode做了一个介绍,他那幽默诙谐的表达方式收到了大家的热烈掌声:

\u0026#xD;\n
企业开源图什么:攒人品、求关注、搏出位、捞实惠、聚众智、收长效
\u0026#xD;\n企业开源怎么搞:拉关系、走门路、吹法螺、写软文、建微博、勤反馈、肯认错
\u0026#xD;\n

如果你对Ruby感兴趣,如果你有自己的想法想要分享给大家,那么不妨去Shanghai on Rails的线下活动看一看,相信一定会有意想不到的收获。

你可能感兴趣的:(Shanghai on Rails举办第9次线下活动)