2007年12月17日,星期一

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

作者:David

现在我们已经发布了主要的 Rails 2.0 版本,更容易频繁地推出小型更新。所以我们打算这样做。Rails 2.0.2 包含了一系列针对各种错误的较小修复,没有重大的问题,只是进一步的完善。但它也包含了一些新的默认设置。

SQLite3 是新的默认数据库

最重要的是 SQLite3 作为新数据库,当我们运行 rails 生成命令而不进行任何指定时,它将是默认配置的。这一改变是因为 SQLite3 比 MySQL 在开箱即用的体验上更简单。无需处理 GRANTs 和 creates,数据库就已存在。尤其是在 OS X 10.5 Leopard 上,它自带了 SQLite3 和驱动 gem,作为开发工具包的一部分预装了。

如果您想预先配置 MySQL(或其他适配器)的数据库,只需运行“rails -d mysql myapp”,一切都和以前一样。但如果您只是在玩一个新应用程序或构建一个小型的内部工具,那么我强烈建议您看看 SQLite3。感谢具有通用性的 db/schema.rb,只需更改 config/database.yml 即可在您的负载需要时从 SQLite3 切换到 MySQL(或其他数据库),就像切换一样简单。

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

新应用程序将以其 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]
  • OPTIONS 添加到默认接受的 HTTP 方法列表中 #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 }

  • 修正了 ActionView#file_exists? 在设置了 @first_render 时可能不正确 #10569 [dbussink]
  • 添加了 Array#to_param 会在其所有元素上调用 to_param #10473 [brandon]
  • 确保自动创建资源缓存目录。#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]

Active Record

  • 确保乐观锁能正确处理 nil #lock_version 值。关闭 #10510 [rick]
  • 使 Fixtures Test::Unit 增强功能更能支持双重加载的测试用例。关闭 #10379 [brynary]
  • 修正了 validates_acceptance_of 仍然适用于不存在的表(有助于引导新数据库)。关闭 #10474 [hasmanyjosh]
  • 确保 has_many :through 关联的 :uniq 选项保留顺序。#10463 [remvee]
  • Base.exists? 不会捕获异常,以避免隐藏 SQL 错误。#10458 [Michael Klishin]
  • 文档:Active Record 异常,destroy_all 和 delete_all。#10444, #10447 [Michael Klishin]

Active Resource

  • 为 400、401 和 403 添加了更具体的异常(均继承自 ClientError,因此现有的 rescues 将正常工作)#10326 [trek]
  • 修正了空响应处理。#10445 [seangeo]

Active Support

  • 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!,使其不会清空 options hash。关闭 #10419 [ReinH]

Rails

  • 将默认数据库从 mysql 更改为 sqlite3,因此现在运行“rails myapp”时,config/database.yml 将配置为 SQLite3(在 OS X Leopard 上,它默认安装,gem 也是,所以一切正常,无需任何数据库配置)。要获取预先配置为 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 #10435 [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]