Ruby on Rails 2.1 - 数据库迁移



Rails 迁移使用 Ruby 定义数据库模式的更改,从而可以使用版本控制系统来保持数据库结构与实际代码同步。

它有很多用途,例如:

  • 开发团队 - 如果一个人进行了模式更改,其他开发者只需要更新并运行 "rake migrate"。

  • 生产服务器 - 当您推出新版本时,运行 "rake migrate" 以将数据库也更新到最新版本。

  • 多台机器 - 如果你在台式机和笔记本电脑上进行开发,或者在多个位置进行开发,迁移可以帮助你保持所有机器的同步。

Rails 迁移可以做什么?

  • create_table(name, options)

  • drop_table(name)

  • rename_table(old_name, new_name)

  • add_column(table_name, column_name, type, options)

  • rename_column(table_name, column_name, new_column_name)

  • change_column(table_name, column_name, type, options)

  • remove_column(table_name, column_name)

  • add_index(table_name, column_name, index_type)

  • remove_index(table_name, column_name)

迁移支持所有基本数据类型 - 字符串、文本、整数、浮点数、日期时间、时间戳、时间、日期、二进制和布尔值 -

  • 字符串 - 用于小型数据类型,例如标题。

  • 文本 - 用于较长的文本数据,例如描述。

  • 文本 - 用于较长的文本数据,例如描述。

  • 整数 - 用于整数。

  • 浮点数 - 用于小数。

  • 日期时间和时间戳 - 将日期和时间存储到列中。

  • 日期和时间 - 只存储日期或时间。

  • 二进制 - 用于存储图像、音频或视频等数据。

  • 布尔值 - 用于存储真或假值。

有效的列选项为:

  • limit ( :limit => “50” )

  • default (:default => “blah” )

  • null (:null => false 表示 NOT NULL)

注意 - Rails 迁移执行的操作可以使用任何前端 GUI 或直接在 SQL 命令提示符下执行,但 Rails 迁移使所有这些操作都非常容易。

有关这些内容的详细信息,请参阅 Rails API

创建迁移

以下是创建迁移的通用语法:

C:\ruby\application> ruby script/generate migration table_name

这将创建文件 db/migrate/001_table_name.rb。迁移文件包含描述数据库表数据结构的基本 Ruby 语法。

注意 - 在运行迁移生成器之前,建议清理模型生成器生成的现有迁移。

我们将创建两个与我们的三个表对应的迁移 - books 和 subjects。

C:\ruby> cd library
C:\ruby\library> ruby script/generate migration books
C:\ruby\library> ruby script/generate migration subjects

请注意,您在创建迁移时使用小写字母表示 book 和 subject,并使用复数形式。这是 Rails 范例,您每次创建迁移时都应遵循此范例。

编辑代码以告知其要执行的操作

转到应用程序的 db/migrate 子目录,并使用任何简单的文本编辑器逐个编辑每个文件。

修改 001_books.rb 如下:

ID 列将自动创建,因此在这里也不要创建它。

class Books < ActiveRecord::Migration
   def self.up
      create_table :books do |t|
         t.string     :title, :limit => 32, :null => false
         t.float      :price
         t.integer    :subject_id
         t.text       :description
         t.timestamp  :created_at
      end
   end
   def self.down
      drop_table :books
   end
end

self.up 方法用于迁移到新版本,self.down 方法用于根据需要回滚任何更改。目前,上述脚本将用于创建books表。

修改 002_subjects.rb 如下:

class Subjects < ActiveRecord::Migration
   def self.up
      create_table :subjects do |t|
         t.string :name
      end
      Subject.create :name => "Physics"
      Subject.create :name =>"Mathematics"
      Subject.create :name => "Chemistry"
      Subject.create :name => "Psychology"
      Subject.create :name => "Geography"
   end
   def self.down
      drop_table :subjects
   end
end

上述脚本将用于创建subjects表;它将在 subjects 表中创建五条记录。

运行迁移

现在您已经创建了所有必需的迁移文件,是时候将它们应用到数据库了。为此,请转到命令提示符并打开应用程序所在的库目录,然后键入rake migrate,如下所示:

C:\ruby\library> rake db:migrate

这将创建一个 "schema_info" 表(如果不存在),该表跟踪数据库的当前版本。每次新的迁移将是一个新版本,并且将运行任何新的迁移,直到您的数据库达到当前版本。

Rake 是一个类似于 Unix make 程序的 Ruby 构建程序,Rails 利用它来简化复杂任务(例如更新数据库结构等)的执行。

为生产和测试数据库运行迁移

如果您想指定要用于迁移的 rails 环境,请使用 RAILS_ENV shell 变量。

例如:

C:\ruby\library> set RAILS_ENV=production
C:\ruby\library> rake db:migrate
C:\ruby\library> set RAILS_ENV=test
C:\ruby\library> rake db:migrate
C:\ruby\library> set RAILS_ENV=development
C:\ruby\library> rake db:migrate

注意 - 在 Unix 系统上,使用 "export RAILS_ENV=production" 代替 set 命令。

接下来是什么?

现在我们有了数据库和所需的表。在接下来的两章中,我们将探讨两个重要的组件:控制器 (ActionController) 和视图 (ActionView)。

  • 创建控制器 (Action Controller)
  • 创建视图 (Action View)
广告