写点什么

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

  • 2011-05-22
  • 本文字数:2399 字

    阅读完需:约 8 分钟

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

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

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

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

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

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

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

可以简单地把 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 字节的消息大小限制。

主题演讲之后是本次活动加入的一个新环节――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 添加评论功能。

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

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

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

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

2011-05-22 02:231835
用户头像

发布了 135 篇内容, 共 56.6 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

借助Elephant Swap打造的ePLATO,背后的高溢价解析

EOSdreamer111

谈谈基于JS实现阻止别人调试通过控制台调试网站的问题

南极一块修炼千年的大冰块

7月月更

Qt | 信号和槽的一些总结

YOLO.

qt 7月月更

Linux操作系统下Docker的完整部署过程

Java永远的神

Docker 程序员 架构 程序人生 云原生

Starfish Os打造的元宇宙生态,跟MetaBell的合作只是开始

鳄鱼视界

数据库故障容错之系统时钟故障

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说 CnosDB Tech Talk

Redis设计规范

知识浅谈

redis' redis 精讲

Starfish Os打造的元宇宙生态,跟MetaBell的合作只是开始

EOSdreamer111

算法题每日一练---第12天:算式900

知心宝贝

程序员 算法 前端 后端 7月月更

SpringBoot 整合 Swagger 自动生成在线API文档

宁在春

springboot swagger 7月月更

浏览器视频帧操作方法 requestVideoFrameCallback() 简介

devpoint

html5 视频处理 requestAnimationFrame 7月月更

Bootstrap警告和轮播插件详解【前端Bootstrap框架】

黎燃

7月月更

Plato Farm在Elephant Swap上铸造的ePLATO是什么?

威廉META

SpringBoot整合Minio 项目中使用自己文件存储服务器

宁在春

springboot Minio 7月月更

【函数式编程实战】(十) 优雅的处理代码中的时间类

小明Java问道之路

Lambda java8 Stream API 7月月更 签约计划第三季

一文读懂Plato Farm的ePLATO,以及其高溢价缘由

股市老人

数据中台建设(三):数据中台架构介绍

Lansonli

数据中台 7月月更

C# 之 方法参数传递机制

陈言必行

7月月更

算法题每日一练---第11天:第39级台阶

知心宝贝

程序员 算法 前端 后端 7月月更

机器学习如何做到疫情可视化——疫情数据分析与预测实战

是Dream呀

人工智能 机器学习 爬虫 数据可视化 疫情分析

C# 窗体应用使用对象绑定 DataGridView 数据绑定

IC00

C# 7月月更

语音聊天app——如何规范开发流程?

开源直播系统源码

软件开发 直播系统源码 语音聊天系统

计算机视觉中Python如何实现图像操作与处理

迷彩

Python 计算机视觉 图像处理 Pillow 7月月更

汽车智能应用生态的下一个趋势:车载小程序

Geek_99967b

车联网 物联网,

Starfish Os打造的元宇宙生态,跟MetaBell的合作只是开始

威廉META

Prometheus 运维工具 Promtool (四)TSDB 功能

耳东@Erdong

Prometheus 7月月更 签约计划第三季 Promtool

鲜衣怒马散尽千金,Vue3.0+Tornado6前后端分离集成Web3.0之Metamask钱包区块链虚拟货币三方支付功能

刘悦的技术博客

Python 区块链 Vue 加密货币 虚拟货币

MySQL进阶--存储过程以及自定义函数

Java学术趴

7月月更

Linux环境快速搭建elasticsearch6.5.4集群和Head插件

程序员欣宸

Java elasticsearch 7月月更

Starfish Os X MetaBell战略合作,元宇宙商业生态更进一步

股市老人

《我的Vivado实战—单周期CPU指令分析》

攻城狮杰森

cpu 计算机组成原理 7月月更 vivado 计算机科学与技术

Shanghai on Rails举办第9次线下活动_Ruby_丁雪丰_InfoQ精选文章