快速业务通道

利用Rails中Rake管理MySQL数据库 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
边已经有了一些数据,需要将这些现成的数据融合到应用程序的数据库中去。例如,在进行客户的结帐时,往往需要询问客户,以确定他们居住在哪个州。因为州名可能在程序中很多地方使用到,于是就有必要创建一个名为state的model。但这里又不想手工的创建这样的表格,因为这样做不只是很烦琐,更重要的是可能导致错误。

这个时候,就可以使用fixtures这一功能了。它最初的目的,是为了在进行程序测试时,简化从示例数据向测试数据的转换工作。Fixture是包含运行测试时使用数据的文件。但是,稍微加工一下,我们也可使用它们在migration迁移期间来加载数据。

但后来的事实证明,这是一种很不错的方法,可以使用种子数据生成测试的Model,例如前面所提到的州名。所需要做的工作就是把数据按照fixtures的格式进行组织,这里的格式要求有两点:YAML(YAML Ain''t Markup Language,这是一种数据序列化(serialization)语言,是一种可读的文本的数据结构,它的设计目标是使人们容易读,程序容易处理。它类似XML,但是比XML简单)及comma-separated(逗号分隔)。

下面将展示如何通过逗号分隔的fixture文件,用于保存州名,并且使用Rake来生成包含这些数据的数据表。这是假定读者已经创建了state model及migration文件,接下来生成数据表。

首先,请记住Rails的编辑习惯,因此这里应该在项目的test/fixtures目录下创建我们的fixtures,因为这些数据最主要的用途还是用来进行测试。当然了,在项目的db目录下面还可以创建seed目录,用于存放种子数据。

然后,创建state.csv文件,并存放在db/seed目录下面。该文件的内容如下:

id, name, abbreviation

1, Alabama, AL

2, Alaska, AK

3, Arizona, AZ

4, Arkansas, AR

5, California, CA

6, Colorado, CO

利用Rails中Rake管理MySQL数据库(3)

时间:2011-11-09

接下来,需要创建一个Rake文件,至于这一点,要想完全讲清楚,没有一篇比较长的文章很难。因此在这里不进行具体的解释,只列出步骤。创建seeder.task文件,并将它存放在项目的lib/tasks目录下面,该文件的内容如下所示:

namespace :db do
   desc "Load seed fixtures (from db/seed) into the current
         environment''s database."
   task :seed => :environment do
      require ''active_record/fixtures''
      Dir.glob(RAILS_ROOT + ''/db/fixtures/*.csv'').each do |file|
         Fixtures.create_fixtures(''db/seed'',
                                  File.basename(file, ''.*''))
      end
   end
end

为了生成states数据表,需要在项目的目录下执行如下的命令:

%>rake db:seeder

登陆MySQL数据库服务器,检查数据库,表已经创建好了。

三、在数据库之间迁移数据

Rails的开发者Tobias Lutke遇到了数据迁移的问题,他采用Rake任务将数据库中的数据生成YAML格式的文件,再通过Rails的Migrations功能来生成其它数据库(包括MySQL、SQLite、SQL Server以及Oracle)。在这里,不列出具体的代码,因为很长,只列出一些关键的命令就可以了。

执行下面的命令,把数据库中的数据生成YAML格式:

%>rake db:backup:write

于是,数据库中的所有表都备份到了db/backup目录中了。接下来要做的就是修改database.yml文件,以指向接收数据的数据库。并运行如下的命令:

%>rake db:backup:write

四、小结

作为一个Rails开发者,你可能熟练得运用“rake”运行你的测试,或者你利用“rake db:migrate”运行你的数据迁移任务(migration)。但是,你是否真正明白在那些Rake任务的背后发生了什么吗?你是否意识到,你可以编写属于你的任务,或者创建好用的属于你的Rake

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号