- 浏览: 118296 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
hexawing:
相当好的入门级文章,收藏学习了!
rake任務詳解 -
minn84:
...
2012目标 -
luopeng_sg:
请问LZ这用的是JRuby还是CRuby呢?
验证码生成插件simple_captcha -
orcl_zhang:
2套?有钱人。100本,貌似有点多。
2012目标 -
keating:
来捣乱
要有梦
从
Merb 和 Rails 决定合并开始,过了一年多的努力终于发布 Beta 版啦。Rails3 最重要的人物就是总架构师 Yehuda Katz 了,整个把 Rails core 翻了好几翻,彻底改头换面。
Why? 我是这么想的,DHH 一开始开发 Rails 的时候,Ruby 社群还不像现在这么发达,所以很多事情必须自己造(连 prototype 都是为了 Rails 而造的),为了达到非常容易设定跟快速开发的理想,得包山包海什么功能都要做,再加上有限的资源,造成了 Rails core 其实绑得很紧,基本上就是一整包给你。要修改扩充它,常常就必须
monkeypatch 一下。另一方面,对怎样的 Ruby 程序是好程序,一开始也没有这么多人想清楚,例如 Rails core 充满了 alias_method_chain,这件事情现在也被认为是比较不好的写法。
Rails3 的时代不同了,Ruby 社群起来了。我们有标准的 Rack 界面、我们有不同的ORM甚至是 NoSQL 的储存库、我们有不同 JS Libary、我们有不同测试方式 RSpec、我们也有许多现成不需要自己造的新函式库。Rails3 基本上就是这么一个接近改掉重写的版本,但是以重构的方式达成了这个兼容并蓄的目标:将 API 重新厘清、彻底模块化、低耦合度组件、大幅提升效能等。具体来说,有几个成果:
使用 Ruby 1.8.7
或 Ruby 1.9
1.9 的时代终于要来临了可以复习一下我去年演讲的投影片 。
Dependencies 管理
本来的 config.gem 换成新的 Bundler 来管理所有用到的函式库,使用新的 Gemfiles 格式,本来的 config.gem sucks 问题多功能有限。现在,我们真的做到可以完全不依靠系统 gems。可以参考这篇 Bundle me some Rails 示范
Bundle 的用法
新的 Routes
由于全面导入 Rack 的关系,现在的 Route 其实也是一个 Rack middleware,实作上就是 rack-mount。新的 Route 第一眼看到就是 API 的改变了,可以参考这篇 Revamped
Routes in Rails 3 ,不过这其实不是最重要的地方,最厉害的地方是,它参数 :to 接的端点其实是 rack 端点,而 main#home 是 MainController.action(:home) 的简写( 是的!! Rails3 中每个 Controller actions 全都是一个标准的 Rack app!! 超酷!!),可以看看 Yehuda 的实作说明 。既然是
Rack 端点,我们就可以给它接其它 Rack app,例如
Sinatra,这一篇就示范了怎么接 Rails 3 Routing
with Rack ,真是超级简单啊。我们可以预期,会有更多有趣的 Rack middlewares
可以与 Rails 结合。
另外,我们也可以直接在 Routes 层直接办到
redirect 和 render template,可以看看
Yehuda 的实作说明:Generic Actions
in Rails 3 ,基本上就是简单的 Rack middleware。
新的 Active Model
为了达到与不同 ORM 衔接的目标,Rails3 的 ActiveModel 将本来的 ActiveRecord 的个别功能抽出来成为 Module,例如 callbacks, validations, serialization, observing, dirty tracking 等。任何 Class 只要符合 ActiveModel 定义的几个 API,再加上 include 你需要的 Module,就可以与 Rails3 接在一起了。请参阅 ActiveModel:
Make Any Ruby Object Feel Like ActiveRecord。
其中 Validation 有新的 API,请参阅
validates
:rails_3, :awesome => true
ActiveRecord
那 ActiveRecord 本身呢? 引入了 ARel 这套 SQL 产生工具(why Arel?),大幅采用 “method chain” 的串接用法,让每个操作都变成了 scope。
ActiveRecord 因此也有了新的 API: Active Record
Query Interface 3.0
ActionController
Responder 带来了 respond_with,可以简化 controller 的写法,用法参考 Cleaner
RESTful Controllers w/ respond_with 、Default
RESTful Rendering 和 Three
reasons to love ActionController::Responder 这几篇。这工具非常有趣,我之前甚至写了一个 plugin respond_methods 来让 Rails 2.x 支持这个功能。
另外,新的 Render 实作可以让你轻易扩展,这一篇 Render
Options in Rails 3 示范了怎么做出你自己的 render :pdf。
ActionView
几个大的改变:
1. 采用 Erubis 实作
2. 预设 XSS protection 打开,再也不用忘记加上 h 逸出了。请参考 SafeBuffers
and Rails 3.0 有更多细节
3. 将所有 JavaScript helpers 改成
unobtrusive。你会发现 Rails3 的
public/javascripts 多了一个 rails.js,这就是一个 JS driver,预设是接 prototype.js,要换成 jQuery 非常简单,只要用 jQuery 版本的 rails.js 就可以了。因此本来的一些 Ajax Helper 就被移除了,有需要的话可以在
prototype_legacy_helper plugin 找回来。
4. Helpers 预设输出格式是 HTML 5。
说到 HTML5,我另外推荐这份阅读材料 Dive into HTML5 以及 HTML 5 Demos and Examples 。
ActionMailer
首先底层换成 Mail 这套工具了,可以参考这篇介绍。接着,受益于 Controller 的重构成果,新的 ActionMailer 终于和 Controller 继承自同一个 AbstractController,让 ActionMailer 的功能增加不少,也大大的 DRY 了。
新的 API 请参考 New
ActionMailer API in Rails 3.0
最后它的位置改放在 app/mailers 了,放在
app/models 下实在让人搞混啊。
ActiveSupport
之前的 ActiveSupport 有个讨厌的地方是,如果你只想要用到其中的几个功能,很不容易搞懂到底要 require 哪些东西,最后只好通通载入以求保险。新的 Rails3 把这件事情弄清楚了,你可以只加载你要的部分。
Rails Application object
为了让一个 Process 可以跑多个 Rails app,Rails3 使用了一个 Rails Application 对象来表示一整个 Application 的所有设定,因此本来的 config/environment.rb 的功能,几乎都搬到
config/application.rb 了。另外,Rack 的标准 config.ru 档案也被加到了根目录,因此要特别注意到你的 Application
名称,这会是跟其它 Application 互动时使用的名称,预设是目录的名字。
新的 Rails Module
几个常数被拿掉了,RAILS_ROOT 要改用 Rails.root、RAILS_ENV 要改用 Rails.env、RAILS_DEFAULT_LOGGER 要改用 Rails.logger 等,详细请参阅这篇 The Rails
Module (in Rails 3) 。改成对象的好处是,我们就不需要做字符串操作这种事情了。
新的 rails 指令
本来的 script/* 指令全部拿掉了,都改成用 rails。例如 script/console 变成 rails console (可以简写成 rails c)、script/generate 变成 rails generate (可以简写成 rails g)、script/server 变成 rails server(可以简写成 rails s)。使用 rails –help 可以看到完整说明。
推荐阅读
Rails3 的阅读资料非常多,官方的 Rails 3.0: Release Notes
是必读。如果你从升级的方向切入,可以使用官方的升级 Plugin
rails-upgrade is now an official plugin ,它可以帮助你 1. 检查需要升级的地方 2. 产生 Gemfile 3. 产生新的 routes.rb。请搭配这篇 The Path to Rails 3:
Approaching the upgrade 服用。不过,嗯,现在还是不要在 Production 环境上升级比较好,毕竟很多 Plugin 还没跟上来哩 (可以看看 Is Your Plugin Ready For Rails 3?
和 Rails Wiki 有整理哪些 Plugins OK 了)。
如果是从重新开始会容易得多,可以看 The
Path to Rails 3: Greenfielding new apps with the Rails 3 beta 这篇。十分建议你有空的话,现在就可以开始玩玩看了。
如果想多了解 Rails 的架构,有几篇文章可以看看:
* The Path to Rails 3: Introduction (算是最简单的一篇,可以看看)
*
Rails 3 Beta is Out — A Retrospective
* Rails
3: The Great Decoupling
* Rails Edge
Architecture
* Rails
and Merb Merge: The Anniversary (Part 1 of 6)
*
Rails and Merb Merge: Performance (Part 2 of 6)
* Rails
and Merb Merge: Plugin API (Part 3 of 6)
* Rails
and Merb Merge: Rails Core (Part 4 of 6)
最后,如果你还想找更多,英文的懒人包有:Rails 3.0 Beta: 36 Links and
Resources To Get You Going 、Rails 3 Reading
Material 、On
the way to Rails 3 – a link list
写道
http://liuming.iteye.com/blog/578339
忽然发现这篇更详细,各位可参考~
评论
共同学习
http://blog.plataformatec.com.br/2010/01/discovering-rails-3-generators/
http://caffeinedd.com/guides/331-making-generators-for-rails-3-with-thor
用哪个什么thor,可以调用所有rails 框架调用的东西,好像和产生一个新的应用有点像,最后可以打包成Gem来安装
如果插件能够很方便的替换和升级,而不影响其他插件和组件,那么Rails的大发展就一定会到来了,软件的可重用性和可维护性问题如果很方便可以解决了,这可是多少人梦寐以求的啊,继续研究
http://weblog.rubyonrails.org/2010/2/9/plugin-authors-toward-a-better-future
这个里面说的。
说是用Railties但是又有什么限制,搞不懂这些高深的,查了很多地方,都没有很清楚的说明Rails 3 插件是如何开发的。
看了railscast刚出来的两篇,关于rvm和bundler的介绍。
我的装上去报一些错,暂时先不折腾了。
等待正式版出来吧。
补充:刚查了一下,还真有这回事……
一开始是为了在rails中提供相应的ajax方面的应用而开发的,不过现在已经是一个独立的项目了。
补充:刚查了一下,还真有这回事……
原英文版的地址你也应该贴出来。
发表评论
-
快闪行动-->为你的项目添加标签模块
2011-04-23 16:44 1223在开始之前,还是要不厌其烦的说说,那些不必要写的你自己搞把,反 ... -
Paperclip在Windows下的那些Po事
2011-04-02 04:22 13231.Paperclip提示command is not rec ... -
FireBug实用指南
2011-03-28 00:14 1426古语有云:工欲善其事必先利其器.对于Web开发人员来说, ... -
在或不在
2011-02-13 23:58 0我在我的路上停止了脚步,为的是走一条新的路...没有人明白我的 ... -
验证码生成插件simple_captcha
2011-01-12 23:37 1932插件地址:https://github.com/eshopwo ... -
关于Mar's shoe的创意思考
2011-01-12 00:52 1038在昨天我的一个伙 ... -
ruby各种小脚本(集装箱)
2010-12-01 03:32 1888有时候听歌听的入迷了,就想下载google的歌词,可是下下来总 ... -
我是rails插件控
2010-12-01 03:01 0有些问题总是有点疑惑,既然能够用插件解决,为啥要自己写呢?反正 ... -
豆瓣“我说”功能的rails简单实现
2010-11-30 23:07 011111 -
用rails开发新版的起点中文网
2010-11-30 23:06 011111 -
用rails实现简单邮件发送测试
2010-11-02 17:53 1490我的环境是ruby1.8.7, rails ... -
工作中遇到的Aajx
2010-10-30 10:22 01.ObjectRange $A($R(1,5)).join( ... -
后台订单处理提醒功能
2010-10-26 17:31 01.参考豆瓣提醒 2. 用户<%= link_to&qu ... -
工作遇到的图片问题
2010-10-26 11:09 0<% record = shirt_window %&g ... -
工作中遇到的JS
2010-10-26 10:17 01.getElementById() 方法可返回对拥有指定 I ... -
页面代码
2010-10-25 13:08 0<% record = shirt_window %&g ... -
工作中遇到的CSS
2010-10-24 20:13 01.cursor 属性规定要显示的光标的类型(形状). 引用 ... -
工作小记
2010-10-19 18:50 01.svn commit 提交要注意别把别人的代码冲走了.. ... -
問答頻道模塊開發
2010-10-12 09:22 0直接參考JE的問道頻道.... -
草稿箱的崛起...
2010-09-30 16:51 0你懂个P啊...
相关推荐
<br>Agile Web Development with Rails, 2nd Edition<br><br>有两份PDF文件,大小分别是7.39MB和6.55MB<br><br>作者: Dave Thomas , David Heinemeier Hansson , Leon Breedt , Mike Clark , James Duncan Davidson ,...
自制<br>命令:<br>rails doc<br>cd doc<br>rake rails:freeze:gems 或 rake rails:freeze:edge<br>rake doc:rails<br>在rails_app/doc/doc/目录中就生成了一个API目录,即可
nnoremap <silent> [unite]a :<C>Unite -buffer-name=files flask/<CR> nnoremap <silent> [unite]v :<C>Unite -buffer-name=files flask/views<CR> nnoremap <silent> [unite]vt :<C>Unite -buffer-name=files ...
rails连接oracle需要的驱动<br>执行命令:C:\> ruby 文件名.rb<br><br>
<% 3.times do %> ho!<br/> <% end %> ``` **安全输出**: - 使用`h()`方法来转义输出内容,防止XSS攻击: ```html Email: <%= h("Ann&Bill<frazers@isp.email>") %> ``` #### 四、敏捷开发与迭代 **敏捷...
Apress Pro ActiveRecord Databases with Ruby and Rails<br><br>Active Record has primarily been covered as a subsection,<br>or maybe as a chapter or two, within a larger scoped book generally about the ...
formtastic 是一个Rails表单构建器插件,提供语义丰富和可访问的标记。 示例代码: <%= semantic_form_for @post do |f| %> <%= f.inputs do %> <%= f.input :title %> <%= f.input :body %> <%= f.input :...
主要功能点是: <br>1. 新闻发布(标题、内容(1000个汉字即可)、新闻分类、有效期)<br>2. 新闻的分类<br>3. 新闻列表显示(能翻页)<br>4. 新闻的详细内容显示 实践和个人能力的展示。<br>不拘一格尽量让学生自己...
自述 <h1>MotoGP API 参考</h1> 数据分为以下类型 <li>Pilots <li>Teams <li>Gp Races <h4>Pilots </h4> 这种类型的日期,返回 MotoGp 中飞行员的统计数据。 返回以下数据: <li>Id:每个飞行员的 BD 中的 id。 <li>...
">添加文件:</td> <td><a href="javascript:void(0);" class="files" id="idFile"></a> <img id="idProcess" style="display:none;" src="img/loading.gif" /></td> </tr> <tr> <td colspan="2"><table border=...
《Ruby for Rails中文版》是一本深入探讨Ruby on Rails框架的书籍,它的源代码提供了丰富的实践示例,帮助读者更好地理解和应用Rails开发技巧。在这个压缩包中,包含了多个与Rails编程相关的文件,如`r4rmusic-1`、`...
要想了解和掌握Ruby和Rails,请去这里:<br><br>http://ruby-lang.org.cn/forums/?fromuid=172
Ruby for Rails 英文原版, pdf格式<br><br>本书是一部专门为Rails实践而写的经典Ruby著作,由四部分组成,共17章。第一部分讲述Ruby和Rails的编程环境。第二部分和第三部分与 Rails紧密联系,着重对Ruby这门语言...
$ rails generate mongoid:migration <your> 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback $ rails db:rollback_to VERSION= $ rails db:...
`premailer-rails`会自动将`<style>`块中的CSS转换为内联样式,使得`.highlight`类的样式被正确应用到邮件的`<p>`元素上。 ### 4. 进阶应用 除了基本的样式转换,`premailer-rails`还提供了其他高级功能,比如: ...
Rails的设置 Ruby gem通过将...class User < ActiveRecord xss=removed> { :theme => 'blue' , :view => 'monthly' , :filter => false } s . key :calendar , :defaults => { :scope => 'company' } end end
<h3>Found:</h3> <ul> <% for row in @search.facet(:search_class).rows %> <li> <% if params[:class].blank? %> <%= row.count %> <%= link_to(row.value, :class => row.value) %> <% else %> <strong>...
<td><%= user.email %></td> </tr> <% end %> </table> ``` **控制器(Controller)** 控制器是MVC的中心,它协调模型和视图之间的交互。控制器接收HTTP请求,调用模型进行数据操作,然后将结果传递给视图进行...