利用Rails 的Rake管理MySQL数据库_MySQL数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

利用Rails 的Rake管理MySQL数据库数据库

作者:黑客防线网安MYSQL维护基地 来源:黑客防线网安MYSQL维护基地 浏览次数:0

本篇关键词:管理利用数据创建
黑客防线网安网讯:   作为一名优秀的程序员,除了编写大量的程序外,创建大量的数据库也是在所难免的。在过去的几年中,笔者曾经创建和管理了大量的MySQL数据库,在这个过程中曾使用各种工具来进行管理,以...

   作为一名优秀的程序员除了编写大量的程序外创建大量的数据库也是在所难免的在过去的几年中,笔者曾经创建和管理了大量的MySQL数据库,在这个过程中曾使用各种工具来进行管理,以便使它的过程更简单,例如首选的图形化管理工具PHPMyAdmin,以及基于命令行的MySQL clent,它们都非常好用但是,在笔者内心身处始终觉得,我们是一名程序员,而不是一名数据库管理员,总感觉编程和数据库管理之间有些跨越。为什么不用与编程相同的方式来管理数据库结构呢?自从开始使用Rails,终于找到了答案。通过Rails的功能,可以使用程序员的方式来管理MySQL数据库了。

  一、使用Migrations管理数据表

  在Rails中,当创建一个叫contact的model时,同时一个名为contacts的数据表将会被创建。因此,对数据表contacts的操作可以转换成对模型contact操作,可以访问它的属性。而很多的新手习惯使用一些框架什么的来操作数据表,其实,可以通过Rails本身提供的功能就可以操作数据表了。这样的功能就是Migrations功能。

  多数Rails开发者使用Migrations迁移的基本功能来创建和管理数据库。数据迁移功能让你可以使用Ruby语言来管理数据库方案,可以充分利用一些Ruby所特有的工具,诸如Rake,来根据Ruby脚本提供的指令来更新数据库。还有,数据迁移功能还具有一个内置的版本控制功能,可以像在Subversion或CVS中那样对所做的修改进行前后的回滚。听起来是不是很具有诱惑力呢?

  Migrations有点像活动记录(Active Record,一个对象,它包装数据库表或视图中的某一行,封装数据库访问,并在这些数据上增加了领域逻辑),可以通过Migrations进行程序形式的管理数据表,即可以创建、修改、删除表格,而且语法很简单。更重要的是,Migrations提供了一个构建的控制器。

  事实上,当在Rails下创建一个新的model时,会自动的创建Migration文件。例如,创建一个contact模型时,在项目的db目录下,即可发现一个名为001_create_contacts.rb的文件,其内容如下所示:

  class CreateContacts < ActiveRecord::Migration

  def self.up

  create_table :contacts do |t|

  end

  end

  def self.down

  drop_table :contacts

  end

  end

  如果想要创建数据表,可以把以上内容修改成如下内容:

  class CreateContacts < ActiveRecord::Migration

  def self.up

  create_table :contacts do |t|

  t.column :name, :string, :null => false

  t.column :email, :string

  t.column :phone, :string, :limit => 10, :null => false

  end

  end

  def self.down

  drop_table :contacts

  end

  end

  现在可以使用Migration功能了,在项目的目录下运行如下的Rake命令:

  %>rake db:migrate

  现在登陆MySQL数据库中,可以看到,contacts表已经创建好了。那么,如果想撤消刚才的创建要怎么办呢?要回滚上面的操作可以使用VERSINO选项。因为数据移植功能的工作原理与版本控制工具很相似,你可以将数据库回滚到一个早期的版本。版本号是由数据移植脚本所提供的数字来确认的:

  %>rake db:migrate VERSION=0

  再次登陆MySQL数据库,可以看到contacts表已经删除掉了。此外,如果想进行其它一些更加复杂的操作时,自然而然想到通过创建另一个migrations。例如,想另外创建一张表,或修改字段的数据类型等。可能在项目的目录下运行如下的代码来创建一个新的migration文件:

  %>ruby script/generate migration your_desired_migration_name
  
  二、从Fixture中加载数据

  在创建一个应用程序时,我们往往遇到这样的情况,手边已经有了一些数据,需要将这些现成的数据融合到应用程序的数据库中去。例如,在进行客户的结帐时,往往需要询问客户,以确定他们居住在哪个州。因为州名可能在程序中很多地方使用到,于是就有必要创建一个名为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

  接下来,需要创建一个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.rongsen.com.cn/show-8867-1.html
网站维护教程更新时间:2012-03-20 05:02:12  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer