如何编写Ruby控制台程序(二)

这是来自O’Reilly Network的一篇关于如何如何使用Ruby及ActiveRecord编写控制台程序的教程,文章通过一个例子程序EarGTD演示了编写控制台程序需要注意的方方面面(文件布局,数据库连接等等),作者是Gregory Brown,你可以在这里找到原文 ,这是第二部分。

没有生成器

使用Rails的好处是它可以帮你生成程序的基本框架,你也不需要关心目录结构,但是现在我们打算写一个独立的Ruby程序,因此我们必须自己考虑这些问题了,不过也不用太担心,这不是很复杂。

目录结构

让我们先来看看目录结构吧,EarGTD的目录结构如下:

ear_gtd.db
test_ear_gtd.db
lib/
ear_gtd.rb
test/
test_ear_gtd.rb
Rakefile
earGTD

作为一个示例程序来说,这些文件已经足够了,当然,如果一般的发布版本会有一个bin目录存放可执行脚本,但是为了简单起见,我们先忽略这个。

如果你看过一些Ruby项目的源码,这样的结构在Ruby项目中相当常见,一般lib目录存放你的库文件,data目录存放你的数据文件,test目录存放你的单元测示例。

当然,这个并不是强制的,你也可以将你所有的代码(包括单元测试等等)都放到一个文件中,但是,有些工具可能需要依赖这样的目录结构才能够正常工作。

连接数据库

在Rails中,你可以通过config/database.yml来配置你的数据库连接,但是现在我们需要单独使用ActiveRecord,所以我们还需要做些额外工作。

下面这段代码演示了如何将database.yml文件中的配置信息转换为Ruby代码:

development:
adapter: sqlite3
database: db/my_database.sqlite3

ActiveRecord::Base.establish_connection(
  :adapter => :sqlite3,
  :database => "db/my_database.sqlite3"
)

执行了这段代码后,你就可以通过ActiveRecord来访问你的Model了。

不过,尽管这样也可以工作,但我还是建议你像Rails那样将数据库的连接信息保存到一个YML文件中,事实上,这很简单。

使用YAML库

让我们假设现在你也有一个目录叫做conifg,并且也存放了一个database.yml文件:

development:
adapter: sqlite3
database: db/my_database.sqlite3

那么现在你可以通过下面这段代码来建立你的数据库连接:

require "yaml"
ActiveRecord::Base.establish_connection(YAML.load_file("config/database.yml"))

YAML.load_file会返回一个Hash,因此你可以直接用它作为参数来建立连接。

数据大纲定义

对于我们这个简单的应用来说,没有什么必要使用migration,但是也应该尽量避免直接操作SQL语句,我们可以使用ActiveRecord:Schema来避免直接和SQL打交道。

EarGTD的数据库相当简单:

ActiveRecord::Schema.define do
  create_table :tasks do |t|
    t.column :description, :string
    t.column :status, :string
    t.column :context_id, :integer
    t.column :project_id, :integer
  end
  create_table :contexts do |t|
    t.column :name, :string
  end
  create_table :projects do |t|
    t.column :name, :string
  end
end

现在我们的数据库就搞定了,下面该定义Model了,虽然没有了Rails,但是Model的定义跟在Rails中一模一样,我们将在下一讲中定义我们的Model。

This entry was posted in 指南. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

无觅相关文章插件,快速提升流量