第1页
Ruby China
ruby-china.org
第2页
- Ruby China - Rails - ruby.taobao.org
Gem
@huacnlee
第3页
“ Let's Party! — @Rei
2011-10-28
第5页
Ruby
第6页
• UCloud VPS
• 1 4 Core CPU VPS;
• 4GB
• MongoDB Cache
• UpYun
Assets
• 5M
+
Assets CDN
第7页
30000 27500 25000 22500 20000 17500 15000 12500 10000
7500 5000 2500
20K
30000 25000 20000 15000 10000
5000 0
Now
Now
300000 250000 200000 150000 100000
50000 0
Now
27K 270K
第8页
Topic.pluck(:user_id).uniq.count
Reply.pluck(:user_id).uniq.count
6500 6000
5500 5000
4500 4000
3000 2500
2000 1500
1000 500
rei huacnlee lgn21st luikore kgen bhuztez blacktulip chairy11 ibachue hooooopo
第9页
40,000 36,000 32,000 28,000 24,000 20,000 16,000 12,000
8,000 4,000
8 25
Google
8 30
13K
9 14
9 19
30K
9 24
第10页
() (GB)
8000000 7200000 6400000 5600000 4800000 4000000 3200000 2400000 1600000
800000 0
2013-05
UpYun
2013-11
2014-05
2014-11
2015-05
2015-09
: 1.11 GB
第11页
900 Ruby
Topic.where(node_id: Node.jobs_id).pluck(:user_id).uniq.count
第12页
And…
第13页
Google
第18页
Homeland -
https://github.com/huacnlee/homeland/tree/single-app-rails-3.0
第19页
Shanghai on Rails
第20页
chinaonrails.com
第21页
“ chinaonrails Ruby China ”
– 2012-05-10
https://ruby-china.org/topics/3223#reply4
第23页
- 2010-8 - MySQL ; - Markdown
-
Ruby 1.9.2 Rails 3.0.0.rc2; simple_format
第27页
source 'http://rubygems.org' gem 'rails', ‘3.0.0.rc2' gem 'mysql2'
gem ‘paperclip' gem 'authlogic'
gem 'will_paginate', '3.0.pre' gem 'memcache-client'
第28页
def index
@topics = Topic.last_actived.includes(:user,:node).limit(10)
@sections = Section.all.includes(:nodes)
end
def show
@topic = Topic.find(params[:id])
if current_user
Node.set_user_last_visited(current_user.id, @topic.node_id)
@topic.user_readed(current_user.id)
end
@node = @topic.node
@replies = @topic.replies.all
end
def reply
@topic = Topic.find(params[:id])
@reply = @topic.replies.build(params[:reply])
@reply.user_id = current_user.id
if @reply.save
flash[:notice] = "
"
else
flash[:notice] = @reply.errors.full_messages.join("<br />")
end
redirect_to topic_path(params[:id],:anchor => 'reply')
end
第29页
@lgn21st
Ruby Tuesday @ Hangzhou
第30页
…
第32页
@hooopo
@liuzihua
@chloerei
Twitter V2EX GitHub
Ruby
第33页
Design by @QCee
https://ruby-china.org/topics/8
第34页
GitCafe
第35页
source 'http://rubygems.org' gem "rails", "3.1.1" gem "mongoid", "2.2.4" gem 'carrierwave', '0.5.6' gem 'mini_magick','3.3' gem 'mongoid_auto_increment_id', "0.2.2" gem "devise", "1.4.5" gem 'will_paginate', '3.0.pre2' gem 'omniauth', '0.3.0' gem "oa-openid", '0.3.0' gem 'dalli', '1.1.1' … gem "rails-i18n","0.1.8" gem 'redis-namespace','~> 1.0.2' gem "redis-objects", "0.5.2" gem "rdiscount","1.6.8" gem "settingslogic", "~> 2.0.6" gem "cells", "3.6.7" gem "resque", "~> 1.19.0", :require => "resque/server" gem "aws-ses", "~> 0.4.3" gem 'mail_view', :git => 'git://github.com/37signals/mail_view.git' gem "daemon-spawn", "~> 0.4.2" # gem "sprite-factory", "1.4.1" group :development do
gem 'capistrano', '2.9.0' gem 'chunky_png', “1.2.5" gem 'factory_girl_rails' end
第36页
def index @topics = Topic.last_actived.limit(10) @sections = Section.all render :stream => true
end def show
@topic = Topic.find(params[:id]) @topic.hits.incr(1) @node = @topic.node @replies = @topic.replies.asc(:_id).all.cache if current_user
@topic.user_readed(current_user.id)
current_user.notifications.where(:reply_id.in =>
@replies.map(&:id), :read => false).update_all(:read => true)
end render :stream => true
end
第37页
• ruby-china.org
• Linode
• UI
• Markdown
• Wiki
• Devise
;
• Mongoid, Assets Pipeline, Carrierwave, redis-objects, cells
• Notification
• mongoid_auto_increment_id
第38页
RubyConf China 2011
Ruby China
第40页
• RubyConf China
• Ruby Tuesday
• Ruby
T
• Wiki
• GitHub Ruby China
• Ruby
• RailsCast China TeaHour;
第43页
Ruby
rubybbs.com
shanghaionrails
rubycn.org
thoughtrails.com
ruby-lang.org.cn
chinaonrails.com
第44页
by XiaoBo Liu
第45页
GitHub
Ruby China
@ashchan
@huacnlee
@chloerei @lgn21st
第46页
huacnlee/ruby-china ruby-china/ruby-china
第47页
GitHub
第48页
1400 1225
1,394
huacnlee
xdite
Commits
88 83 40
chloerei ashchan forresty
37 23 19
doitian qichunren xiaods
fredwu
bachue
Commit, 105
5 Commit 21
第49页
>rakestats +----------------------+-------+-------+---------+---------+-----+-------+ |Name|Lines|LOC|Classes|Methods|M/C|LOC/M| +----------------------+-------+-------+---------+---------+-----+-------+ |Controllers|1793|1471|37|208|5|5| |Helpers|489|414|0|54|0|5| |Models|1841|1424|27|146|5|7| |Mailers|16|15|2|1|0|13| |Javascripts|7633|5866|1|694|694|6| |Libraries|708|500|8|46|5|8| |Apispecs|1024|886|0|1|0|884| |Controllerspecs|720|613|0|0|0|0| |Featurespecs|37|33|0|0|0|0| |Helperspecs|461|378|0|0|0|0| |Libspecs|620|470|3|0|0|0| |Modelspecs|1405|1185|3|0|0|0| |Requestspecs|51|40|0|0|0|0| |Routingspecs|21|17|0|0|0|0| |Viewspecs|35|27|0|0|0|0| +----------------------+-------+-------+---------+---------+-----+-------+ |Total|16854|13339|81|1150|14|9| +----------------------+-------+-------+---------+---------+-----+-------+ CodeLOC:9690TestLOC:3649CodetoTestRatio:1:0.4
第50页
GitHub Issues 2015
Open PR 3
Open Issue 30
Merged PR 127
Closed Issue 230
Closed PR 54
Open PR
Merged PR
Closed PR
Closed Issue
Open Issue
第51页
• Ruby
•
•@ • Markdown
•
• API • Bug
第52页
• •
• Internet Explorer
• •
• Vote Up / Down
第53页
PR
UI
…
第54页
Ruby China
“”
第57页
KeyNotes
…
第63页
Ruby
JRuby
Rubinius Faya
Rails Benchmark
第66页
Unicorn
11 212m
第68页
Rails
Ruby
第69页
100ms
50ms
第71页
Homeland (Rails 3.0) 2014-05 (Rails 4.1)
2011-11 (Rails 3.1) Now (Rails 4.2)
Ruby China
2013-05 (Rails 3.2)
2013-12 (Rails 4.0)
Response Time (ms)
/
/topics
/topics/:id
/topics/node:id
/:login
第72页
•
•
•
View
Fragment Cache
•
• JavaScript
• Rails API
render collection: items
• MRI Ruby IO
Thread
• Gem
Changelog, PR;
• GC ;
• Gem
第74页
GC
TuneMyGC
https://tunemygc.com/
第75页
- evanphx/benchmark-ips -
Benchmark
- MiniProfiler/rack-mini-profiler -
- rails/rails-perftest -
- SamSaffron/memory_profiler -
allocated
Gem
- ruby-prof/ruby-prof -
“
”
第76页
IO
def index @threads = [] @threads << Thread.new do @suggest_topics = Topic.suggest.limit(3) end
@threads << Thread.new do @topics = Topic.last_actived if current_user @topics = @topics.without_nodes(current_user.blocked_node_ids) @topics = @topics.without_users(current_user.blocked_user_ids) else @topics = @topics.without_hide_nodes end @topics = @topics.paginate(page: params[:page], per_page: 22) end @threads.each(&:join)
end
第77页
updated_at
irb> reply.cache_key "replies/256261-20150825031859640000000"
<% cache([reply]) do %> <div class="reply"> ... </div>
<% end %>
第78页
Ruby China -
Rails
Rails 3.0.0 … 4.2.x
Ruby 1.9.3 … 2.2.3
Gems Bootstrap
第79页
Homeland
第80页
2011-11 - v1
第81页
2013 - v1.1
第82页
2014-5 - V1.3
第83页
Now
第84页
• Rails Router URL Helper
CURD ERB)
Less SQL
• ActiveModel Scope Topic.last_actived.without_hide_nodes
•
Helper
View user_name_tag, user_avatar_tag
• Rails
4.x.0
• GitHub
•
Ruby
第86页
Ruby China
第87页
• Ruby Rails;
• • •
第88页
Ruby
第89页
END
第90页
QA
- @huacnlee - huacnlee@gmail.com