2007 年 12 月 17 日(星期一)

Rails 2.0.2:一些新默认设置和一些修复

大卫发布

现在我们已经发布了 Rails 2.0 的重大版本,所以更频繁地发布一些较小的更新将变得更容易。这就是我们接下来要做的。Rails 2.0.2 包含很多针对各种错误的较小的修复,没有什么惊天动地的操作,只是进一步修复。但它也包含一些新默认设置。

SQLite3 是新的默认数据库

最重要的是 SQLite3 作为当你在没有指定任何内容的情况下运行 rails 生成命令时我们默认配置的新数据库。做出这一改变是因为 SQLite3 单纯地是比 MySQL 更简单的开箱即用体验。不用纠结于 GRANT 和创建,数据库就在那里。在 OS X 10.5 Leopard 下尤其如此,它随附 SQLite3 和作为开发工具包一部分预先安装的驱动程序 gem。

如果你想为 MySQL(或任何其他适配器)预先配置数据库,只要执行 “rails -d mysql myapp”,然后一切都与以前相同。但如果你只是在玩一个新应用程序或构建一个小型的内部工具,那么我强烈建议你看看 SQLite3。由于不可知的 db/schema.rb,从 SQLite3 切换到 MySQL(或另一个数据库)就和你修改你的 config/database.yml 一样容易,只要你的负载许可即可。

在生产模式下不要检查模板变更

新应用程序将会在它们的 config/environments/production.rb 中生成带有以下选项:

config.action_view.cache_template_loading = true

这将阻止 Rails 持续对文件系统执行 STAT 调用以检查文件是否已更改。这可能会产生很多 I/O 活动,尤其是如果你有很多部分。如果你有非常快速的磁盘,这可能无关紧要,但如果你正在使用较慢的磁盘,它可以产生很大的不同。

缺点是,你无法再仅仅 svnup 一个模板文件并立即看到更改。你必须重新启动应用程序服务器才能实现这一点。

无论如何,我们认为在偏重部分的世界中,这是更好的默认设置,但你当然可以随时对其进行更改。

Rails 2.0.2 是 Rails 2.0 的直接替代品

若要升级,只需执行 “gem install rails”(如果 gem 仍未传播,请使用 —source http://gems.rubyonrails.org)或使用新的 rel_2-0-2 标记

其余更改如下:

Action Pack

  • 将 delete_via_redirect 和 put_via_redirect 添加到集成测试 #10497 [philodespotos]
  • 调用 xml_http_request 时允许手动设置 headers[‘Accept’] #10461 [BMorearty]
  • 在默认接受的 HTTP 方法中添加了 OPTIONS #10449 [holoway]
  • 添加了传递 proc 到 ActionController::Base.asset_host 的选项,以获得最大的可配置性 #10521 [chuyeow]。示例

ActionController::Base.asset_host = Proc.new { |source| if source.starts_with?(‘/images’) “http://images.example.com” else “http://assets.example.com” end }

  • 修复了如果 @first_render 设置,ActionView#file_exists? 将不正确的问题 #10569 [dbussink]
  • 添加了 Array#to_param 在其的所有元素上调用 to_param #10473 [brandon]
  • 确保自动创建 asset 缓存目录。#10337 [Josh Peek, Cheah Chu Yeow]
  • render :xml 和 :json 保留了自定义内容类型。#10388 [jmettraux, Cheah Chu Yeow]
  • 重构 Action View 模板句柄。#10437, #10455 [Josh Peek]
  • 修复 DoubleRenderError 消息,并删除了从过滤器返回 false 的提示。关闭 #10380 [Frederick Cheung]
  • 清理了 ActionController::Base#head 周围的一些残留内容。关闭 #10417 [ssoroka]

活动记录

  • 确保乐观锁定正确地处理 nil #lock_version 值。关闭 #10510 [rick]
  • 为双重加载测试用例提供更多支持,强化 Fixtures Test::Unit 增强功能。关闭 #10379 [brynary]
  • 修复验证 validations_acceptance_of 仍适用于不存在的表格(对启动新数据库非常有用)。关闭 #10474 [hasmanyjosh]
  • 确保 has_many :through 关联的 :uniq 选项保留顺序。#10463 [remvee]
  • Base.exists? 不挽救异常,以避免隐藏 SQL 错误。#10458 [Michael Klishin]
  • 文档:活动记录异常、destroy_all 和 delete_all。#10444, #10447 [Michael Klishin]

活动资源

  • 为 400、401 和 403 添加了更具体的异常(均来自 ClientError,因此现有的挽救措施将起作用)#10326 [trek]
  • 更正空响应处理。#10445 [seangeo]

活动支持

  • Ruby 1.9 兼容性。#1689, #10466, #10468 [Cheah Chu Yeow, Pratik Naik, Jeremy Kemper]
  • TimeZone#to_s 使用 UTC 而不是 GMT。#1689 [Cheah Chu Yeow]
  • 重构 Hash#symbolize_keys! 以使用 Hash#replace。关闭 #10420 [ReinH]
  • 修复 HashWithIndifferentAccess#to_options!,所以它不会清除选项哈希。关闭 #10419 [ReinH]

Rails

  • 将默认数据库从 mysql 更改为 sqlite3,所以现在运行 “rails myapp” 将具有一个为 SQLite3 设置的 config/database.yml(在 OS X Leopard 中默认安装,即宝石,所以所有内容都无需任何数据库配置就能正常工作)。要获得预先针对 MySQL 配置的 Rails 应用程序,只需运行 “rails -d mysql myapp” [DHH]
  • 在 config/environments/production.rb 中默认开启 ActionView::Base.cache_template_loading,以防止每次模板加载都调用文件系统 Stat,以查看它是否更改(这意味着你必须重启应用程序才能在生产模式中看到模板更改)[DHH]
  • 介绍 `rake secret` 来输出一个使用 cookie 会话的加密安全密钥 #10363 [revans]
  • 修正:本地数据库创建应将 127.0.0.1 本地视为 #9026 [parcelbrat]
  • 修正:为脚手架生成的功能测试应使用 fixture 调用而不是硬编码 ID [boone]
  • 添加 db:migrate:redo 和 db:migrate:reset 以重新运行现有迁移 #10431,#10432 [matt]
  • RAILS_GEM_VERSION 也可以用双引号引起来。#10443 [James Cox]
  • 更新 rails:freeze:gems 以配合 RubyGems 0.9.5。[Jeremy Kemper]