《基础 Ruby on Rails》的示例程序asagao与Rails2.2相适应
Cookie Store
上一章讲到rake db:initialize 发生错误时结束了。
错误信息中出现了
undefined method `cache_template_extensions=' for ActionView::Base:Class
把这个放到google上搜索,答案显示在http://whatdoesthiserrormean.com/errors/1264
好像把以 config.action_view.cache_template_extensions= 打头的行从 config/environments.development.rb 删除就可以了。
*******************************************************************
* config.breakpoint_server has been deprecated and has no effect. *
*******************************************************************
又因为也出现了像这样的警告,顺便把 config.breakpoint_server = true 一行也删掉吧。
再次执行 rake db:initialize ,就没问题了
接下来,试着启动 Web 服务器。
启动时没有出现错误。
但是,试着显示首页的话……
Status: 500 Internal Server Error
A secret is required to generate an integrity hash for cookie session data.
Use config.action_controller.session = { :session_key => "_myapp_session",
:secret => "some secret phrase of at least 30 characters" } in config/environment.rb
像这样的错误便出现了。
嗯,这便关系到在 rails 2.1 登场的Cookie Store。
所谓Cookie Store
它是将会话数据存储进cookie的会话管理方式。
传统的会话管理方式中,会话数据被存储进服务器端(文件,数据库,缓存系统等),只有会话ID被存入 Cookie。
Cookie Store与其他方式相比,可以减少服务器端的负荷。
Cookie 中的数据有 4KB 的大小限制,但是 rails 应用程序通常在会话中只存储用户 ID 和闪存信息,因此没什么问题。
然而,因为将数据的散列值也存储在 Cookie 中,用户不能变更会话数据(可以读取)。
照错误信息所写,在 config/environment.rb 后追加如下语句。
config.action_controller.session = {
:session_key => "_asagao_session",
:secret => "d037a8c060089047375b82d9df5e732e"
}
追加的位置在
Rails::Initializer.run do |config| ... end
的内部。
虽然在 :secret 选项可以存储任何值,但是最好是 30 字以上的随机字符串。
执行 ruby script/console 启动 Rails 控制台,如果执行 ActiveSupport::SecureRandom.hex(64) 的话,rails 将以生成应用程序的同样的方法生成随机字符串。
使用 CTRL+C 关闭 Web 服务器,再重新启动。刷新首页,没有显示出问题。
那今天就到这儿吧。
(2008/12/16)
- 前言
- 功能测试开头部分的修改等 (2008/12/01)
- rake rails:update (2008/12/15)
- Cookie Store (2008/12/16)
- 分页 (2008/12/17)
- blog_entries 控制台的修改 (2008/12/20)
- 单例资源 (2008/12/21)
- 一口气通过所有功能测试 (2008/12/21)
- 综合测试和rak (2008/12/22)
- 国际化(i18n)的第一步 (2008/12/26)
- 基于Cookie的区域的切换 (2009/01/04)
- ActiveRecord 模型的字段名的国际化 (2009/01/08)
- 错误信息的国际化(1) (2009/01/09)
- 错误信息的国际化(2) (2009/01/10)
- 错误信息的国际化(3) (2009/01/17)
- 错误信息的国际化(4) (2009/01/24)

