Rails bestpractices.com

Post on 06-May-2015

2.692 views 1 download

description

介绍rails-bestpractices.com,以及开发中使用的plugins/gems

Transcript of Rails bestpractices.com

rails-bestpractices.com

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

为什么需要 Rails Best Practices?

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

遵循 Rails Best Practices

写出更漂亮的 Rails代码

成为更优秀的 Rails程序员

得到更好的回报

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

提供一个分享最佳实践的地方

提供一个获取最佳实践的地方

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

rails best practices的故事

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

很久很久以前。。。

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

2009年 10月 24 日 上海

ihower发表演讲

“Rails Best Practices”

http://www.slideshare.net/ihower/rails-best-practices

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

2009年 11月 03日

rails_best_practices项目启动

http://github.com/flyerhzm/rails_best_practices

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

rails_best_practices项目

根据 ihower的演讲对 rails代

码进行静态分析,找出 bad

smell

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

2010年 06月 19日

metric_fu项目集成

rails_best_practices

http://metric-fu.rubyforge.org

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

2010年 07月 04日

rails-bestpracitces.com项目

启动

http://rails-bestpractices.com

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

rails-bestpractices从何开始?

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Rails Template

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Rails Template

创建 rails应用的模板

扩展 rails应用的模板

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Rails Template

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

run “echo TOD > README”

gem “haml”, “>= 3.0.13”

plugin “typus”, :git => “git://github.com/fesplugas/typus.git”

generate “model User login:string email:string”

route “root :to => 'home#show'”

rake “db:migrate”

git :add => “.”

Rails Template

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Demo

http://github.com/flyerhzm/rails3-template

我碰到的 Rails3变动

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Generators

Routes

ActiveRecord接口

Rspec2

Rails3 Route

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

resources :posts do get :archive, :on => :collection resources :comments, :only => :create resources :votes, :only => [:create, :destroy] resource :implementationend

match 'search' => 'search#show', :as => :searchmatch 'page/:name' => 'pages#show', :as => :pageroot :to => "posts#index"

Rails3 Route

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

/tags/rails/posts => /tags/rails?nav=posts/tags/rails/posts?page=2 => /tags/rails?nav=posts&page=2/tags/rails/posts?action=show&controller=tags&nav=posts&page=2 => /tags/rails?nav=posts&page=2

match "/tags/:id/posts" => redirect { |params, req| if req.query_string.index('page') # query_string remove controller and action "/tags/#{params[:id]}?#{query_string}" else "/tags/#{params[:id]}?nav=posts" end}

Rails3 Scope

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

scope :implemented, where(:implemented => true)

default_scope order('created_at desc')

with_exclusive_scope do scope :most_voted, order('vote_points desc')end

介绍一些非常实用的插件

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Haml

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

一种非常简洁的模板语言,是 ERB的替代品

http://github.com/nex3/haml

Haml (Before)

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

<div id="profile"> <div class="left column"> <div id="date"><%= print_date %></div> </div> <div class="right column"> <div id="email"><%= current_user.email %></div> <div id="bio"><%= h current_user.bio %></div> </div></div>

Haml (After)

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

#profile .left.column #date= print_date #address= current_user.address .right.column #email= current_user.email #bio= h(current_user.bio)

Compass

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

一种 css框架

使得 css更易于创建和书写

http://github.com/chriseppstein/compass

Compass

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

reset

layout (blueprint …)

css3 (border radius, text shadow, gradient …)

utilities (clearfix, float, horizontal list …)

Compass 代码重用

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

@mixin wikistyle { margin: 1em 0; h1 { font-size: 170%; } h2 { font-size: 150%; } …}

Compass 代码重用

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

@import ‘wikistyle’

.post .wikistyle { @include wikistyle; margin-top: 10px;}

.question .wikistyle { @include wikistyle; margin-top: 5px;}

Formtastic

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

简化 form表单的创建

http://github.com/justinfrench/formtastic

Formtastic

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

= semantic_form_for @user do |form| = form.inputs do = form.input :login, :label => 'Username' = form.input :email = form.input :password = form.input :password_confirmation = form.buttons do = form.submit "Register"

Inherited_resources

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

加速 controller的开发

http://github.com/josevalim/inherited_resources

Inherited_resources

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

class AnswersController < InheritedResources::Base before_filter :require_user, :only => [:new, :edit, :create, :update] belongs_to :question

create! do |success, failure| success.html { redirect_to question_path(@question) } failure.html { render 'questions/show' } end

update! do |success, failure| success.html { redirect_to question_path(@question) } endend

Authlogic authlogic-connect

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

注册、登录

使用 facebook、 twitter帐号登录

使用 OpenID帐号登录

Exception_notification

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

邮件通知服务器上的错误

非常重要,必不可少!

http://github.com/rails/exception_notification

简单的优化工作

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

前端优化

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

把所有的 stylesheets组合为一个 all.css

把所有的 javsacripts组合为一个 all.js

把所有的图片组合为一个 css_sprite.png

组合 css

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

= stylesheet_link_tag 'compiled/screen', 'compiled/layout', 'compiled/post', :cache => true

组合 javascript

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

= javascript_include_tag 'jquery', 'rails', 'application', :cache => true

Css_sprite

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

自动处理 css sprite

约定:images/css_sprite目录下的图片组合成 css sprite图片生成 css_sprite.png和 css_sprite.css (css, sass, scss)

http://github.com/flyerhzm/css_sprite

Css sprite

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

twitter_icon.png .twitter_icon

hotmail-logo.png hotmail-logo

icons/twitter_icon.png .icons .twitter_icon

widget/icons/twitter_icon.png .widget .icons .twitter_icon

twitter_icon_hover.png .twitter_icon:hover

twitter-icon-hover.png .twitter-icon:hover

logos_hover/gmail_logo.png .logos:hover .gmail_logo

logos-hover/gmail-logo.png .logos:hover .gmail-logo

.gmail-logo-active.png .gmail-logo.active

logos-active/gmail-logo.png .logos.active .gmail-logo

SQL查询优化

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

找出所有没有索引的数据表外键

http://github.com/eladmeidar/rails_indexes

N+1查询

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

找出 N+1的查询以及多余的 eager loading

http://github.com/flyerhzm/bullet

N+1查询

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

动态提示: (alert, console.log, logger, growl, xmpp)

N+1 Query detected Post => [:user] Add to your finder: :include => [:user]N+1 Query method call stack

测试

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

ngty 测试代码主要贡献者

remarkable_activerecord

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

has_one :implementation, :dependent => :destroy

has_many :posts, :dependent => :destroy

validates_presence_of :title, :body

validates_uniqueness_of :title

remarkable_activerecord

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

should_have_one :implementation, :dependent => :destroy

should_have_many :posts, :dependent => :destroy

should_validate_presence_of :title, :body

should_validate_uniqueness_of :title

Module, module, module

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

class Post < ActiveRecord::Base belongs_to user, :counter_cache => true

def belongs_to?(user) self.user == user endend

Module, module, module

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

module UserOwnable def self.included(base) base.class_eval do belongs_to :user, :counter_cache => true end end def belongs_to?(user) self.user == user endend

class Post < ActiveRecord::Base include UserOwnableend

Module, module, module

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

describe Post do include RailsBestPractices::Macros should_be_user_ownableend

module RailsBestPractices::Macros def should_be_user_ownable describe 'being user ownable' do should_belong_to :user, :counter_cache => true it 'should belong to someone if he is the owner of it' it 'should not belong to someone if he is not the owner of it' end endend

分享你的 Rails最佳实践

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Rails最佳实践问答

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

rails_best_practices gem demo

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

rails_best_practices将会在本

月底开始支持 rails3

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Q&A

谢谢

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development