Ruby 板


LINE

大家好 接下来的一些时间,希望能张贴一些网路上找到的文章, 提供给大家参考,也欢迎多多讨论喔。 转贴之前,我会徵得原作者同意。 以下这篇文章出自於 http://blog.eddie.com.tw/2010/07/16/internet-campaign-with-ruby-on-rails/ 是2010年7月的文章。 -------------------------------------------------------- Ruby on Rails之门外汉心得 by 高见龙先生 这不是讨战文,也不是一篇讨论程式语言的谁优谁劣的文章, 仅就我个人这半年来使用Ruby on Rails(以下简称RoR,不是 那个那个RO线上游戏)用在工作上的一些简单的心得跟大家分 享。 很多厂商喜欢做网路活动来促销新商品、打知名度或是跟网友 拉近距离。目前厂商们比较爱的网路活动,大概有上传照片、 影片、票选、转寄、推荐..等,而随着” 社会的进步”,客 户们也”得跟上时代”,都不免俗的要跟FB或plurk弄在一起 ,而我的工作,主要就是帮客户处理这样的需求。(我想这段 我的同业应该知道我不是在讲真心话!) 就我而言,我个人比较熟悉的程式语言算是ActionScript 2/3 ,大部份的工作也都是跟红红的Flash为伍。但後来的网路活动 越弄越复杂,单纯的Flash已经不见得够用了,很多时候得跟 server端交换资料。 从最早的ASP,後来换到PHP,其实都还不错用,也没什麽问题 (不然PHP现在不会有这麽大的市占率)。後来试着用PHP的Zend Framework,因为现在比较流行的web framework都有照着MVC (Model-View-Controller)的样子来打造,写起来程式码跟页面 有更清楚的感觉。 2009年试着换到Python加Django,它也是MVC的实作,感觉还不 赖,有种程式写起来可以打更少字的感觉。而且它所谓的batteries included,只要把一些设定打开,後台管理功能就直接做起来 了,相当方便。 2010年起,我试着开始把案子用RoR来做,整个有种「我终於可 以把时间花在吃喝玩乐写AS上了」的感觉了。 以下是一些大家可能会有的疑问: Q: 为什麽你要一直换? A: 我是善变的人 :) Q: 你是写AS的,为什麽要自己写server端的程式? A: 情况允许的话当然我也想跟别人一起合作写,不过网路活动很 多都是急件,而且客户通常不太会管你六日周末要不要休假。 後来发现其实自己写真的还挺快的,而要什麽资料或是要接什 麽资料都可以自己加一下就搞定,免看人脸色。 Q: RoR是一种程式语言吗? A: 不是,它是一种web framework,它本身用的程式语言是Ruby。 Q: RoR要钱吗? A: 不用的,而且你有兴趣的话,还可以取得完整的原始码,印出 来上厕所的时候阅读 :) Q: 为什麽用RoR来开发会快? A: 以下的动作我先假设开发的工程师有一些RoR的开发经验。 以一个发票登录的程式来说,假设它需要使用者姓名、电话、 地址、Email及发票号码等几个栏位,我的动作就是先建立一 个Model来对应这些栏位(这动作 大概1~2分钟左右可完成)。 再来就是建立一个Controller来准备接收使用者submit出来的 动作(大概1~2分钟左右),而实际在 Controller里写的程式码 ,也就是把Model给叫出来,把使用者post的资料喂进去,程 式码如下: invoice = Invoice.new(params[:invoice]) 最後再一个save的动作: invoice.save 差不多就搞定了(这动作大概1分钟左右可完成) 刚刚这些资料库写入的动作,再加上一些if..else..的判断, 大概10行程式码有找。整个发票程式部份,不包含设计的话, 大概5分钟能写完,也许如果再加个发票重复登录判断的验证 ,最多应该10分钟搞定。 那要怎麽把资料库里的东西捞出来? 通常只要一行: invoice = Invoice.all (大概3~10秒,依打字速度不同而有差异) 那要怎麽样把它喂给Flash? RoR的ActiveRecord有支援直接输 出成XML或JSON的方法,简单的可以直接用invoice.to_xml 或 invoice.to_json 就行了(大概10秒),复杂一点的,也可以用 xml builder来建个模板给它(看复杂程度,大概5分钟内搞定)。 藉由ORM(Object-Relational Mapping)的包装,把原本要用 SQL操作的动作,都改用物件的方式来操作。而大部份的网路 活动的写入/查询语法都挺单纯,没意外的话应该都不用自己 写 SELECT * FROM 或是 INSERT INTO之类的东西了,不只操 作简单,也可避开SQL Injection的麻烦。 另外RoR的另一大优点,就是它有相当多好用的外挂(plugin) ,而且几乎都是免费可以取得的(包括原始码)。 一样以网路活动上传照片这个来举例,上传照片之後,通常得 自动再产生一些比较小尺寸的缩图,可能还要裁切一下图片。 透过某个方便的外挂(paperclip),上面这些动作,真正要写 程式好像不到5行吧,搞定之後会有种「哇赛!怎麽就这样就可 以了?」的惊奇感。 再例如上传照片後,资料一多,前端呈现的页面通常就得有分 页的功能,而这功能透过某个方便的外挂(will_paginate), 大概只要多加一行程式码就可以搞定分页的工作。 Q: 可是你知道,做网路的活动,客户很爱改来改去…RoR改起来会 不会很麻烦? A: 网路活动的特性,就是变动性高。除了设计部份可能会被改来 改去外,一会可能要你加个中奖名单,一会说这个页面要放到 另一个页面之後…爱改来改去这件事,我想这个是许多同业的 痛! 老实说,就以上面的例子来说,就算整个砍掉重练,也不见得花多 少时间;如果是修改流程,说不定改一下route规则就可以技巧性 的处理掉了,其实面对爱改来改去的状况,RoR还是个不错的应对 工具。 Q: RoR效能好吗? A: 我没比较过所有家的程式语言以及web framework,所以我没办 法下这个结论。通常如果遇到效能差或是资料库负载很吃重的 地方,可以把它做cache或产出静态页面来提昇效能,而做 cache或是把cache给expire掉的动作,在RoR里是很容易做的。 Q: 那,Ruby好写吗? A: 我以AS程式码来举个例子: if (my_age >= 30) { trace("you're so old!"); } 改用ruby写的话: if my_age >= 30 puts "you're so old!" end 基本上少了小括号、大括号,也不用分号结尾,至少就可以少打好 些个字,甚如果想要的话,if也可以放到後面: puts "you're so old" if my_age >= 30 如何? 看起来更像一般的英文吧! 再例如如果我想要印出3天前的日期,有的程式语言可能要先new一 个Date物件出来,再透过一些method可以取得日期。在Ruby里,只 要用3.days.ago就行了。3? 它不是数字吗? 是的,你没看错,在 Ruby里什麽东西都是物件,包括数字也是,所以你可以对3这个物 件呼叫方法,再来个例子: 3.times do puts 'hello' end 猜得出来它在干嘛吗? 它就是把”hello”这个字串印3遍.. 其它关於这个程式语言的细节,如果想了解更多,可参考Ruby的官网 ,有相当多的文件可以看。 Q: 在Flash里可以用AMF的格式与server端沟通,RoR能做吗? A: 可以的,请参考http://blog.eddie.com.tw/2010/03/18/rubyamf Q: 还有什麽好处? A: 前面提到,由於大部份的客户想要做的东西都差不多,例如发票 登录来说,可以的话,也可以把这些常用的功能也做成「发票plugin」 ,也许下次要用的时候,就把plugin装上去,可能再做一些微调 就行了。 Q: 那,好维护吗? A: 基本上RoR的骨架是依照MVC的架构来实做的,所以某A或某B写的程 式码,只要写的人不要用太奇怪的写法,大概都可以知道XX程式或 XX功能会放在哪里(当然改不改得动是另一回事)。重点是,很多网 路活动都是短期的,活动结束就会下架,老实说并没有太多所谓的 维护的问题 :) Q: RoR好像被我讲得很神,那它缺点是什麽? 1. 它的学习曲线的高低决定於开发者的背景知识跟经验 如果你之前就有用别的程式语言开发过网站,那RoR对你来说应该会 比较快上手;如果你对於什麽是Form、什麽是GET/POST还不清楚的 话,那这个对你 来说可能会有些吃力,很容易卡关。特别是如果没 有个导师带入门,还真的很容易碰壁。 (PS: 其实最好还有一些*nix 的操作经验,以及熟悉一些版本控制系统如SVN或Git) 2. 台湾的hosting比较不好找 台湾目前使用的人口还是相当少,国外虽然有比较多的solution, 但客户的网路活动的TA大部份都是在台湾,可能会有连线速度不够快 的问题。这个我解决的方法就是,我自己弄一台机器放机房,自己弄 环境起来 :) 结论 综合以上各项优缺点,我真的觉得RoR挺适合拿来做网路活动,当然做长 期的官网也合适,这里就我自己工作上常遇到的状况提供一些建议。 以上,仅以我这半年来用RoR的一些小小心得与大家分享,我也还是个一 只脚刚踏进去的新手门外汉,内容若有误再请前辈、神人们不吝指教 :) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 173.250.131.100 ※ 编辑: breakanyrule 来自: 208.54.64.141 (09/25 11:46)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP