Ruby on Rails,rake工具使用和数据库migrations迁移的概念
《Ruby on Rails,一个简单的CMS系统,创建应用骨架并与数据库连接》中创建的简单CMS系统的骨架已经搭建完成并且为和数据库交互做了正确配置。我们将当前的数据库结构通过rake命令导出,现在数据库里没有任何表,没关系要的就是这个状态。
cmd
如果命令执行正确的话应该没有什么提示,如果有错误那应该还是与数据库连接上出现了问题,需要自行排查一下。导出的结果存放在simple_cms/db/schema.rb中,确实什么都没有。
ruby
rake是Ruby的一个工具命令有点像make的意思,其格式为:rake xxx:yyy:zzz KEY=VALUE其中的xx和yy有点类似于目录,将命令按照类型分隔开。KEY和VALUE分别是参数的名和值。可以通过rake -T列出可以执行的所有rake任务,我们执行的将数据库导出的命令也位列其中。
cmd
也可以根据部分命令名字缩小范围如rake -T db:schema
cmd
除了预定义任务,也可以使用第三方或自行编写自定义任务。任务的定义放在simple_cms\lib\tasks目录中。
列出的每个任务都有一个描述,如果想更详细的查看任务的介绍以及使用方法需要使用-D参数。比如像看看db:schema:dump的更多信息
cmd
介绍完rake命令后,回到刚才导出数据库的事情上,我们将数据库的当前状态导出是为了进行数据库迁移migrate。
什么是数据库迁移?
数据库迁移就是使用数据库迁移文件将数据库从一个状态转换到另一个状态的动作。每个迁移任务代表针对数据库进行的一次修改,采用独立于数据库的源程序形式来描述,这就是数据库迁移文件。修改的内容既可能是针对数据库结构的,也可能是针对表中的数据的。我们可以用这些迁移任务来升级(up)数据库,比如说创建一个表;也可以撤销(down)对数据库的工作,比如将创建的表删掉。
为什么要使用数据库迁移呢?
开发过程中我们把所有源文件都纳入版本控制,这样当我们犯错误时可以撤销操作,并且可以监控每天都发生了哪些变化。但随着开发的进展,Rails应用的数据库表结构会不断地变化:这里加一张表,那里给一个字段改名,凡此种种。随着代码的改变,数据库结构也在改变。
从前这是个大问题。开发者(或者数据库管理员)可以根据需要改变数据库结构,但如果应用程序代码回滚到一个较早的版本,要想把数据库表结构的修改撤销回去可就有些困难了——数据库本身是没有版本信息的。
增加了数据库迁移功能的Rails 会记住每一次作用于数据库的迁移任务的版本号存放在schema_migrations表中,列出当前版本的数据库是由哪些迁移文件按照顺序执行生成的。
当你要求使用新的迁移任务更新数据库结构时,它会将可用的迁移任务版本号与schema_migrations表中的版本号进行比较,如果发现schema_migrations表中没有的版本,就会根据顺序逐个实施。这样一来,在开发过程中的任意时刻,我们都不仅可以将代码回滚,同时也可以将数据库结构以及其中的内容切换到之前或之后的某一个时刻。
Rails为我们提供的迁移功能方便而强大,值得好好掌握。