Rails每周一题(二十一): Template
当我们在从零开始搭建Rails程序的时候,你是否想过你在做的某些事情其实是在重复自己?比如,配置同样的数据库,安装同样的gem,创建同样的rake task等等。不仅是你,世界上成千上万的人可能在做同样的事情,比如当他们搭建Facebook application或者Google app的时候,大部分人做的大部分初始工作都是相似的。 Rails最重要的的哲学之一是什么?DRY -- Don't ...
Rails每周一题(一):Restful Authentication
什么是Restful Authenticaiton: Restful Authentication是Rails的认证系统插件,它为你生成一个REST风格的认证模板。 具体的概念和生成操作请见:Rails宝典之六十七式:restful_authentication , Rails插件:Restful Authenticaiton. 本篇为你讲述Restful Authenticati ...
Rails每周一题(四):Browser Cache
注意,这里讲的是浏览器端的cache。关于Rails服务器端的cache,以后专门开题再讲。 HTTP协议对Cache 的支持 总而言之,cache机制是为了减少发送request的次数(过期模型),还有就是减少发送整个response的机会以减少网络带宽的使用(验证模型)。 在HTTP协议里面,主要有三种控制cache的方式。 1. Cache-Control Cache- ...
Rails每周一题(七):Security Guide(中)
上篇 中介绍了对session的攻击方法以及应对策略,在此篇继续介绍其它一些对网站的攻击方法以及应对策略。在阅读本文的过程中,你会发现,其实避免很多安全问题并不困难。只是很多时候,我们并没有把安全问题这个概念放在心里。 跨站请求伪造 (CSRF ) 跨站请求伪造在网页上注入恶意代码或者一些恶意链接,来访问用户已被认证的网站。如果session未过期,攻击者就可以进行一些恶意的操作。 ...
Rails每周一题(十):i18n
所谓的国际化:就是根据特定的locale信息,提取相应的字符串和其它一些东西(比如时间和货币的格式)等等。 显然,有三个问题需要解决: 1. 如何确定locale。 2. 如何保存这些locale相关的字符串和其它信息。 3. 如何根据locale提取字符串和其它相应的信息。 让我们来看看rails如何处理国际化。(指rails2.2之后) 首先看看第一点,如何确定loc ...
Rails每周一题(十二):ruby的异常机制
在现实世界中,所有程序都会出错。一个优秀的程序可以预期错误的发生,并且优雅地处理它们。 一种错误处理的方法是:使用返回码。举个例子,我们在使用open方法打开文件,文件不存在时就会出错。我们可以使用一个特殊的返回码来标识这个错误。 但这种处理方式的问题是:管理这些错误代码会显得非常复杂。比如,我们调用了open,read并最终调用close方法,每一个方法都会返回不同的错误代码,我们需要在调 ...
Rails每周一题(十六):Evaluation in Ruby
Ruby的evaluation是一个很重要的功能,它可以eval一个字符串或者一个block。在一些适宜的情况下使用它会得到一些“意外”的效果。 常用的eval Ruby常用的evaluation有:class_eval (module_eval),instance_eval ,eval 。 这三种evaluation方法可以在不同的情况下使用: 1. class_eval ...
Rails每周一题(十九): HAML和Sass
在新项目里使用了Haml -- Html Abstraction Markup Language. 较之于Html,个人感觉Haml有这样几个优点: 1. 对于人来讲,Haml更加规范,更加优美. Html对空格,换行等字符的不敏感对于浏览器来说是好事,但对于人来说并不一定是好事.因为这会放任写代码的人忽略代码的规范,忽略代码的结构,忽略代码的优美.而Haml严谨的格式要求,让代 ...
Rails每周一题(二十二): Engines
Rails世界有无数的各种各样的plugin,极大得助力了Rails应用程序的开发。但plugin的形式较为受限,Rails2.3推出engines plugin,旨在让人们更加方便地共享成果。 它做了什么? The engines plugin enhances Rails' own plugin framework, making it simple to share control ...
Rails每周一题(二):routes
Rails其实很好懂,可视的源码和大量的注释,只看你有没有心去一窥究竟。今天就来看看貌似神秘的routes吧。一个命令 首先,介绍一个rake命令。对于不了解routes定义规则的,或许看到routes.rb文件有点迷糊。不要紧,如果你想看看一个url到底对应了哪个controller以及action,就用rake routes展开所有的奥秘吧。几多规则 routes的定义规则其实不多,让我们来一 ...
Rails每周一题(五):alias_method magic
1. alias_method Makes new_name a new copy of the method old_name . This can be used to retain access to methods that are overridden. module Mod alias_method :orig_exit, :exit # Without al ...
Rails每周一题(八):Security Guide(下)
在上篇和中篇中介绍了对session的攻击和其它一些常见攻击。在下篇中着重介绍注入攻击。 注入是通过向网站内引入恶意代码或者一些恶意参数,使这些有害的代码得以在网站的安全环境中运行的攻击方法。最显著的例子是XSS和SQL注入。 SQL注入 用一个简单例子介绍SQL注入。 Project.find(:all, :conditions => "name = '#{pa ...
Rails每周一题(十一):Rails Caching
上次讲到一篇关于web浏览器的cache ,而本篇要讲述的是web服务器端的cache。 Web服务器端的cache通过减少对web应用程序的访问和对数据库的访问来减少服务端的负载以及提升客户端的响应速度。 Rails本身提供了对web服务器端cache的很好支持,当然还有一些更加方便的plugin如cache_fu 。 Cache需要关注的问题有几点: 1. Cache对象 2 ...
Rails每周一题(十四):Performance Testing之度量
我们这里谈到的性能测试包括性能度量和性能优化两部分,此篇主要关注性能的度量。将来会有单独一篇专题来讲述rails web应用程序的性能优化。 为什么要做性能测试 显而易见,对于一个web应用来讲,性能是重中之重。这直接关系到产品上线之后产品能否满足现实环境对性能的需求。而对于一个交付产品而言,客户对性能提出的实实在在的”数据要求“,是性能测试以及优化的目标。 什么时候做性能测试 ...
Rails每周一题(十七): 从Singleton Class看Ruby的对象模型
我们可能了解Ruby的singleton method概念,它指的是一个对象独有的方法。 下面举个简单的例子,首先来定义一个类: class ExampleClass def foo puts 'foot' end end 然后创建两个实例,并且给第二个实例增加一个singleton method: example1 = ExampleClass.new example2 = Examp ...
Rails每周一题(二十):Rack变革
Rack,貌似已经把Rails改革了。 Rack Rack是什么?Rack提供了用ruby开发web应用的一个接口。比如Rails框架,就是由rack承担着跟web服务器之间的交互。简而言之,Rack已经成为ruby开发web应用程序的一个规范,它统一了web服务器和web框架之间的交互接口。它所支持的web服务器和web框架已经非常之多:http://rack.rubyforge.or ...
Rails每周一题(三):Mongrel & Apache on jruby
用Apache和Mongrel搭建jruby on rails服务器平台。 为什么要Apache 主要是用apache作反向代理 ,个人觉得主要有两点。(什么是反向代理?与forward proxy相比,反向代理是处理in-bound的request,不需要客户端进行任何配置,reverse proxy主要用于cache和load balancer。而forward proxy的存在,大都 ...
Rails每周一题(六):Security Guide(上)
此篇文章总结自:http://guides.rubyonrails.org/security.html 谢谢某同学的提醒。 Web应用存在的安全问题包括账号劫持,绕过访问控制,读取或者修改敏感信息或者显示欺诈内容等。通过security guide系列篇让我们一起来看看应该如何正确使用Rails来克服这些问题。 在上篇中,主要描述对session的攻击,以及应对方法。 首先简 ...
Rails每周一题(九):Ajax调用和javascript执行
本题讲述Rails处理Ajax返回中的javascript的几种方法: 1. html.erb中的javascript代码。 Javascript代码嵌于<script>的tag中。javascript代码会在 客户端被执行(执行之后并不保留源码,对于下述几种方法也一样)。 2. js.erb中的javascript代码 Javascript代码直接写于js. ...
Rails每周一题(十三):cap
想象一下我们在部署的时候需要做的事情: 1. 不断地登录登出各服务器 2. 执行大量的重复命令 有人说,我们可以脚本化在服务器上运行的一系列命令;最后,我们还希望能自动化到服务器的登录登出。 于是,capistrano 就出现了。 Capistrano通过让rails应用的部署成为一个可重复的简单操作使之更加便捷和可靠。 有兴趣的,来这里get started 。 (鉴于 ...
Rails每周一题(十五): Rake
简介 简单而言,Rake是一个由ruby编写的build工具。 DSL Rake是由ruby实现的,它的rakefile完全是由ruby语法定义的,所以它是一种内部DSL--基于另一种语言(宿主语言)编写的DSL。 Dependency Based Programming Rake跟ant和make一样,是一种Dependency Based Programming。 ...
Rails每周一题(十八): Association之魔法
要写出优美的rails代码,必须理解和掌握association的机制。它能使代码编写更加简单和方便,更能使你的代码更加简洁和优美。除此之外,也必须了解association背后的实现。有时候,代码的优美不代表一切,甚至代表着背后的丑恶。 Association魔法 先来看看什么是association,以及association如何使你的代码更加简单和优美。 举个rub ...
Ruby on Rails创始人David Heinemeier Hansson
丹麦的哥本哈根,一个诞生软件天才的地方(北欧的其它的城市也同样诞生了好多天才)。20年前,一位天才在这里开发了自己的pascal编译器(后来这个编译器成了turbo pascal的前身),随后这位天才在美国开发出了turbo pascal、delphi、C#这样的重量级产品。快20年后的2003年,同样在丹麦的哥本哈根,历史似乎正要在重演。 然而,如果有人在2003年前看到这个小伙子,也许没人 ...
Rails知识库热门文章
最新评论
不能适应超过三层的的override,比如我有A,B,C三个模板,B在A的基础上添加自己的东西,C在B ...
mingliangfeng 评论了 Rails宝典之第八式: layout与content_for
mingliangfeng 评论了 Rails宝典之第八式: layout与content_for
[/b][i][/i][u][/u]引用[color=red][/color][size=medium ...
linjie_830914 评论了 Rails源码研究之ActionController:二,ro ...
linjie_830914 评论了 Rails源码研究之ActionController:二,ro ...