Ruby on Rails 2.0 日记
第3章 SQLite3
上一章中,生成了新程序。虽然还不具备任何功能,但是还是先试着运行一下服务器吧。
script/server
好像成功运行的样子。在浏览器上打开“http://localhost:3000/”,照例出现了“Welcome aboard”的画面。
但是下面却出现了点问题。像往常一样点击“About your application's environment”的链接。这时出现的却是“MissingSourceFile in Rails/infoController#properties”的奇怪的字符串。仔细看的话还有“no such file to load -- sqlite3”的错误信息!这下可算是接受了 Rails 2.0 的洗礼。准确的说,是接受了 Rails 2.0.2 的洗礼。
从 Rails 2.0.2 开始默认数据库由 MySQL 变成了 SQLite3。理由好像是比起 MySQL,SQLite3 更方便。虽说确实是这样,但是对没有安装 SQLite3 环境的人来说却吓了一大跳。顺便说一下,Mac OS X 10.5 Leopard 中 SQLite3 是默认安装的,所以听到这个消息后作为 ubuntu 用户只有感到痛苦的份儿。
依照以前的,选择 MySQL 作为数据库的话,生成新程序的时候是像下面这样写的。
> rails -d mysql sample
但是为长远打算,试着安装 SQLite3 然后使用吧。
首先从 Windows 开始。
从 www.sqlite.org 上下载SQLite3的 DLL 。是个ZIP 压缩文件,首先在PATH通过的目录上解压(C:\ruby\bin 等)。只运行 Rails 程序的话,不需要命令行程序(sqlite3.exe)。
用 RubyGems 安装 sqlite3-ruby。
> gem install sqlite3-ruby
这就结束了。简单的吧。
2008年8月27日 sqlite3-ruby 1.2.4 版发布,但是这个版本中并没有配置 Windows 用的二进制。因此,编译环境不完整的话,便出现了“'nmake'不能作为内部命令或外部命令,以及可以操作的程序或批处理文件被识别”的信息,安装失败。请按照"gem install sqlite3-ruby --version=1.2.3" 指定版本安装。
然后在 Linux (Ubuntu) 下安装。
首先,将 sqlite3 版通过 apt-get 安装。
> sudo apt-get install sqlite3
只是这样的话当然不行。从刚才的错误信息中所知,对应 sqlite3 的 Ruby 代码是必要的。在 Google 上查一下,好像可以通过 RubyGems 加上 sqlite3-ruby。
> sudo gem install sqlite3-ruby
啊,还是运行不畅。安装中失败了。
Building native extensions. This could take a while...
ERROR: Error installing sqlite3-ruby:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.8 extconf.rb install sqlite3-ruby
extconf.rb:1:in `require': no such file to load -- mkmf (LoadError)
from extconf.rb:1
本来以为将 RubyGems 升级就可以了…(从错误信息中知道不行还真是难得)
> sudo gem update --system
啊,版本变成了1.0.1!但是,sqlite3-ruby 的安装还是失败。
然后通过 Google 不断地调查,不断的尝试,在无数次错误后终于知道了是缺少 ruby1.8-dev、libsqlite3-dev、libsqlite3-ruby 三个包。
> sudo apt-get install ruby1.8-dev > sudo apt-get install libsqlite3-dev > sudo apt-get install libsqlite3-ruby > sudo gem install sqlite3-ruby
成功!“Welcome aboard”页的“About your application's environment”也正确地显示出来。
感兴趣的是,在点击“About your application's environment”链接的瞬间,在 db 目录中生成了 development.sqlite3 这个空的文件。顺便说一下,config/database.yml 的描述(摘要)变成了这样::
development: adapter: sqlite3 database: db/development.sqlite3 timeout: 5000
今天就到这里。
(2007/12/21)
- 前言
- 第1章 安装 (2007/12/15)
- 第2章 生成新程序 (2007/12/16)
- 第3章 SQLite3 (2007/12/21)
- 第4章 模板文件的扩展名 (2007/12/22)
- 第5章 功能测试 (2008/01/19)
- 第6章 redirect_to 与 url_for (2008/02/24)
- 第7章 config/initializers 目录 (2008/02/27)
- 第8章 生成 Rails 1.2 的 API 文档 (2008/03/04)
- 第9章 helper :all (2008/05/05)

