由于参加中国加速,需要在大连待4个月,于是和史蒂芬孔同学商议在大连举行一次ruby开发者聚会,时间初步定在9.25(周六)下午2点到5点,地点目前还没有确定,活动的目的主要是给大家提供一个互相交流的机会,所以计划只安排2个演讲,其它时间留给大家自由讨论,如果有大连的朋友对这个活动感兴趣,可以通过下面地址报名或者直接联系我。 报名地址: http://dlruby.51qiangzuo.com/ 活动地点确定后,会通过短信和邮件通知大家。
抢答开源
抢答本身是抢座的表单模块,但是由于Google Form在国内无法正常使用,所有我们将其剥离了出来,作为一个单独的产品运营,经过这段时间的运营,我们收到了许多用户反馈,其中大部分是功能需求,但是由于我们的人力有限,这些功能一直没有做,所以我们决定将抢答的代码开源出来,希望能够借助社区的力量让这个产品更加的完善,也希望能够对需要此功能的朋友有所帮助。 源码地址: http://github.com/yzhang/thundersurvey 许可证: GPLv2 抢答是基于Rails 3和MongoDB,因此你需要首先安装mongodb,然后执行下面的命令即可: $ git clone http://github.com/yzhang/ThunderSurvey.git $ bundle install $ sudo mongod $ rails s 如果有问题或者建议,欢迎和我联系。
Rails 图表解决方案汇总
最近需要给抢座增加图表功能,于是对Rails的图表方案做了些调查,整理成这篇贴,希望对有同样需求的人有所帮助。 Google Chart Google Chart的优点是接口简单,容易上手,但是缺点也很明显,需要依赖Google的服务,在有些地方加载可能会存在速度问题,并且有被GFW的风险。 Google Chart的Rails插件很多,个人比较喜欢mattetti的googlecharts: googlecharts: http://github.com/mattetti/googlecharts gchartrb:http://code.google.com/p/gchartrb google-charts-on-rails:http://code.google.com/p/google-charts-on-rails/ gc4r:http://code.google.com/p/gc4r/ Google Visualization Google Visualization是Google Chart的升级版,Rails插件:http://github.com/mwarnock/rails-google-visualization-plugin Gruff Gruff是基于RMagick的Ruby绘图工具,功能强大,可扩展性和可定制性都非常好,不过由于Gruff需要在服务端实时生成图片,因此不适合实时展示数据。 Gruff还有一个JS封装bluff:http://bluff.jcoglan.com/ Flot Flot是一个jQuery插件,可以基于JS生成实时图表,如果你使用jQuery,那么Flot是个不错的选择。Flot有一个很好用的Rails插件插件Flotilla: http://github.com/joshuamiller/flotilla GNUPlot GNUPlot最初是为学术目的使用的数据可视化工具,但是现在也支持生成非交互式的2d和3d图形,如果你需要生成非常复杂的图形,那么可以试试gnuplot,GNUPlot有一个叫rgplot的rubygem可以使用:http://rgplot.rubyforge.org Ziya Ziya是一个Rails图表插件,可以生成非常漂亮和复杂的Flash图表,如果你不介意Flash,那么Ziya是个不错的选择。 Scruffy Scruffy是一个Rubygem,它的目标是帮你生成高质量的SVG和PNG图片,同Gruff一样,是一个服务端解决方案,不过Scruffy目前似乎已经停止开发了,首页的图片在Firefox和Chrome下均无法显示。 Highcharts 感谢dxiao同学留言,Highchars是一个纯JS的图表库,但是实现的效果却和Flash不相上下,相当绚丽,兼容性也很不错,并且有一个Rails的插件可以用,值得一试。 Raphaeljs 感谢Quake推荐,Raphael也是一个非常不错的JS绘图控件,他的核心库是raphaeljs,一个画图工具,详情可以看官方网站 : http://g.raphaeljs.com/ Flash 除了上面介绍的Ziya,Flash图表解决方案还有很多,下面列举几个对Rails支持比较好的: Open Flash Chart II:http://pullmonkey.com/projects/open_flash_chart2/ Fusion Charts Free:http://www.fusioncharts.com/free/ maani.us xml/swf charts:http://www.maani.us/xml_charts/ amcharts: http://www.amcharts.com/,archarts有一个很好用的Rails插件:ambling 参考:http://stackoverflow.com/questions/87561/what-is-your-preferred-way-to-produce-charts-in-a-ruby-on-rails-web-application
使用map/reduce为mongo_mapper增加sum方法
mongodb的map/reduce是个十分强大的功能,mongo_mapper虽然已经接近于1.0,但还是少一些比较有用的功能,比如对一个字段求和,取最大,最小值等,不过你可以很容易的通过mongodb的map/reduce为mongo_mapper扩展这些功能,甚至是更复杂的,下面以sum为例: class Model def self.sum(field) m = “function () {emit(‘sum’, this.#{field.to_s})}” r = “function(k, vals) { var sum = 0; for(var i in vals){sum += vals[i];}; return sum;}” res = self.collection.map_reduce(m, r) return res.find().next_document['value'].to_i end end
Rails性能优化简明指南
最近多背一公斤的网站由于前段时间加了太多功能,但是没有考虑性能问题,导致速度下降,内存占用剧增,apache频频重启,需要进行优化,于是花了点时间学习了下rails的优化,整理成这篇文章,希望对遇到同样问题的人有用。
用logrotate自动打包Rails的日志
logrotate是Linux系统的日志打包程序,通过cron运行,要使用logrotate打包你的rails日志,只需要在/etc/logrotate.d/目录下为你的rails应用创建一个配置文件即可,配置文件的语法如下:
处理InvalidAuthenticityToken异常
Rails 2.3引入的防止跨站攻击的功能在某些情况下会导致用户正常使用时也产生InvalidAuthenticityToken异常,比如某个表单需要登录后才能提交,但是用户在登录后,过了很长一段时间才提交,此时Session已经失效,就会导致这个异常,有些人会直接忽略验证AuthenticityToken的filter,但是这样有安全隐患,比较好的处理方法就是在ApplicationController中增加一个全局Handler: class ApplicationController < ActionController::Base &nsp; rescue_from ActionController::InvalidAuthenticityToken, :with => :bad_token def bad_token flash[:notice] = “Your session has expired.” respond_to do |accepts| accepts.html do store_location redirect_to(:controller => ‘/sessions’, :action => ‘new’) and return false end accepts.js do store_location render :update do |page| page.redirect_to(:controller => ‘/sessions’, :action => ‘new’) and return false end end end end [...]
ar_mailer Rails 3 插件
ar_mailer是个很不错的邮件发送插件,工作原理是将邮件发送分为两部分,首先将邮件保存到数据库,然后在调用后台程序实现异步发送,可惜的是目前还不支持Rails 3,于是花了一个下午,将它移植到了Rails 3,这就是:ar_mailer_rails3。 安装 sudo gem install ar_mailer_rails 使用 script/rails generate ar_mailer_rails3 Email 你也可以将Email替换为其它名字,邮件将会被保存到这个Model中。 Generator会自动生成一个initializer: # config/initializers/ar_mailer.rb ActionMailer::Base.add_delivery_method :active_record, ArMailerRails3::ActiveRecord, :email_class => Email ActionMailer::Base.delivery_method = :active_record 如果你不希望所有Mailer都使用ActiveRecord发送,也可以在Mailer中单独定义: class MyMailer < ActionMailer::Base self.delivery_method = :active_record end 命令行的使用方式和ar_mailer是一样的,只不过为了和ar_mailer 2保持兼容,命令行的程序变成了ar_mailer_rails3: $ ar_sendmail_rails3 -h 详细的使用方法可参看这里
豆瓣API Rails 插件
目前只支持Rails 3 beta,地址:http://github.com/yzhang/douban 安装 $ gem install douban 使用 1. 修改Gemfile: gem ‘douban’, :require => ‘oauth’ require ‘douban’ 2. 运行generator $ script/rails generate douban 3. 修改config/douban.yml, 并在ApplicationController中包含DoubanHelper: class ApplicationController include DoubanHelper end 4. 然后在你的application layout中加入: <% if douban_authorized? %> <%= link_to ‘注销豆瓣登录’, douban_logout_path %> <% else %> <%= link_to “使用豆瓣帐号登录”, douban_login_path %> <% end %> [...]
Rails 3 beta 中文邮件乱码问题解决
更新: Mail 2.2 已解决此问题 如果你升级到了Rails 3 Beta,并且使用了ActionMailer,那么你会发现邮件标题出现有规律的乱码,每个8的倍数的地方都出现了奇怪的字符,这是ActionMailer和Mail gem配合出现了问题,解决的办法很简单,修改ActionMailer::Base#quote_fields,将这个函数改成如下: def quote_fields!(headers, charset) #:nodoc: m = @_message m.subject ||= headers[:subject] if headers[:subject] m.to ||= headers[:to] if headers[:to] m.from ||= headers[:from] if headers[:from] m.cc ||= headers[:cc] if headers[:cc] m.bcc ||= headers[:bcc] if headers[:bcc] m.reply_to ||= headers[:reply_to] if headers[:reply_to] end 给Rails Core提了一个Patch,但是因为考虑不周,没有通过,所以官方的解决方案恐怕要等到Mail 2.2或者Rails 3 Beta1。
