mysql,Linux,HighPerformance,ruby on Rails

2010年2月23日星期二

我对AppEngine的理解及JrubyOnAppEngine入门最精简版

用Ruby一年了,让自己感触深处的是自己的成长。所以私底下里暗想,多去理解一门语言对于开发者还是有必要的。在ChinaonRails社区我正好发起一次线上Ruby聚会讨论Jruby on GAE,使用Google Wave来缩短Ruby爱好者的距离和时空。有不少朋友在Wave上Ping我,参加我发起的聚会,因为之前我们并不认识,也不了解对方,但我们就是通过Ruby话题能产生线上聚会的能力。用Google Wave来解决实用操作问题,这也是我突发奇想,因为我之前一直找不准用Wave能干嘛。所以试试吧。

言归正传,Google AppEngine对于开发者来说,它的价值在哪里。实际上我在按它的教程中一步走下来后,我认为那就是简化了开发流程,让开发者只要有网络,就可以发布自已的应用(有限制,但可以付费解决。实际情况是作中小行应用产生的流量还不是很差,对我们来说起步是没有问题的)。它可以存储数据,可以处理图片,邮件,还能Cron。在这样一个有限的空间里,目前我看到已经有的应用有Blog,Email及image Services.如果你是SOA的架构,你完全可以使用它来处理一个小功能模块。

上手时我使用了Python,可以说我对Python的学习就是1天的时间,我并没有想掌握这门语言,我就是去在线教程看了一下安装,helloword就可以了。你这时就可以去看Google Appengine的手册了,按着它的要求一步一步走下去作一遍。具体在哪里呢,这里的《使用入门》有Python,Java两块,全中文,只要是中国人就能去写。我当然直接Python直接去跑了一遍。理解到了WSGI和Ruby对应的就是Rack,对于什么是Rack可看这里,在Python中使用GAE的入门文档,不会有任何未之错误,一路走下来很快就能掌握。

当然为了明天(2-24星期三下午1点到2点)的聚会当主持,不至于什么都不清楚,我特意去找了JRuby的资料,很显然这块并不是很热,所以大部分单独使用Jruby结合GAE for JAVA SDK的文章,只会增加难度,让我也是很受伤。不过最后还是发现了金子:appengine-jruby,跟进了一下文档,实作了一把。明白它这个项目就是我们需要的,完全是一路顺风就能用上ruby On Engine。意义在于你会Ruby,那么你就可以直接无痛的实作在GAE上。
如果我理解没有错误的话,对于GData层,它使用DataMapper解决,Sinatra对应Google的webapps框架,这很重要,template也被HAML替换。也就是说你编码使用的是纯ruby。所以你完全透明使用它,不必考虑它的兼容性语法问题。Awesome!

那么如果你也想使用上JRuby On GAE的话,怎么整呢,入门手册你看多了也不会消化,我给你最直接的方式:
第一步:安装JAVA,5,6都可以,6当然好,性能取胜。
第二步:安装appengine-jruby gem,
 $ sudo gem install google-appengine
可能会出现问题,不要急,很有可能是gem兼容性问题,不用急着翻阅资料,看看错误性能再找找。为什么我这里强调就是因为我出现问题就去找了好大一会,其实是多虑了。
第三步:先跑hello应用:这里:

$ mkdir hello
$ cd hello
新建config.ru放在hello下,输入如下代码

run lambda { |env| Rack::Response.new('Hello World!').finish }

然后跑吧
hello $ dev_appserver.rb .
浏览验证它:
http://localhost:8080/

第四步:来个真实的sinatra版的helloWorld。 按这里走

以上就是全部,更多看这里

其实看多了也没有意义,就是Request,Respone这个模式。

总结下来,我们掌握了Jruby就可以作与twitter,Google..Service交互的web应用。
如果你想不出来,可以去github下去看看代码去部署一个Blog

参考:
appengine-jruby代码库:
http://code.google.com/p/appengine-jruby/

Yoko Harada
http://yokolet.blogspot.com/

Rake for jruby
http://github.com/nicksieger/jruby-rack

sinatra framework
http://www.nicecabbage.com/tag/sinatra/


__END__

没有评论:

发表评论