`
jiajie0531
  • 浏览: 29431 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails Database Migrations 4 Running Migrations 运行数据迁移

阅读更多

version: rails 4.1

4 运行 migrations

 

Rails 提供了一个 Rake 任务的集合,用来运行 migrations 的某个集合。

 

你将会使用的关于 Rake 任务的第一个数据前置的指令可能是 rake db:migrate。在它的最基本的form中,为了所有的还没有运行的 migrations, 它仅仅运行 change 或者 up 方法。如果还没有这样的 migrations,它就存在了。它将会按顺序,基于migration的日期来运行这些数据迁移。

 

注意,运行 db:migrate 任务也会调用 db:schema:dump 任务,将会更新你的 db/schema.rb 文件来匹配你的数据库的结构。

 

如果你详细指定一个目标版本,Active Record 将会运行必须的 migrations(change, up, down)直到它已经到达特定的版本。这个版本是基于数字形式前缀的 migration 文件名。例如,为了 migrate 版本 20080906120000 运行:

$ bin/rake db:migrate VERSION=20080906120000

如果版本 20080906120000 大于现在的版本(i.e. 它是向上migrate),将会运行 change (或者 up)方法上升到版本 20080906120000,将不会产生后续的 migrations。如果向下 migrate,将会运行 down 方法向下migrations,但没有版本 20080906120000。

4.1 Rolling Back 回滚

一个平常的任务是回滚到上一个 migration。例如,如果你在其中犯了个错误,然后期待更正它。相比较向下降版本,涉及到以前的  migration,你可以运行:

$ bin/rake db:rollback

这将会回滚到最近的版本, 或者恢复 change 方法,或者运行 down 方法。如果你需要撤销一些 migrations,你能够提供一个 STEP 参数:

$ bin/rake db:rollback STEP=3

将会恢复到最近第三个 migrations。

db:migrate:redo 命令用来做一个回滚是一个捷径,然后再一次备份 migration。正是 db:rollback 这个命令,你能够使用 STEP 参数,如果你需要去更多的一个版本来回退,例如:

$ bin/rake db:migrate:redo STEP=3

这几个 Rake 指令所执行的操作,你不能够和 db:migrate 一起使用。他们是比较简单的,既然你不需要显示地指定所需要数据迁移的版本。

 

4.2 Setup the Database 建立数据库

rake db:setup 指令将会创建数据库,载入数据库模式和生成数据来初始化。

 

4.3 Resetting the Database 重置数据库

rake db:reset 指令将会删除数据库,然后再建立。这个就是 rake db:drop db:setup 的翻版。

p.s.:对于运行所有的 migrations 是不一样的。将仅仅使用当前 schema.rb 文件的内容。如果一个migration 不能够被回滚,rake db:reset 可能不会帮到你。为了找更多的关于数据库模式的内容,可以参考 Schema Dumping and You

4.4 Running Specific Migrations 运行指定的migrations

如果你需要运行一个指定的migration,升版本或者降版本,db:migrate:up 和 db:migrate:down 指令能完成上述任务。只要指定合适的版本,相对应的 migration 将会自己更改,调用 up 或者 down 方法,例如:

$ bin/rake db:migrate:up VERSION=20080906120000

将会运行 20080906120000 版本的 migration 通过运行 change 方法(或者 up 方法)。这个任务将会首先检查 migration 是否已经被执行,如果 Active Record 相信 它已经在运行了,那么就啥也不需要做。

4.5 Running Migrations in Different Environments 在不同的环境运行migrations

默认的情况下,运行 rake:migrate 将是在 开发环境中执行的。为了在另外的环境中再一次运行 migrations,当运行这条命令的时候,你可以使用 RAILS_ENV 环境变量来指定它。例如,为了能在测试环境中运行 migrations,你可以这样做:

$ bin/rake db:migrate RAILS_ENV=test 

 

4.6 Changing the Output of Running Migrations 改变运行migrations的输出

默认情况下,migrations 会确切告诉你他们在执行什么以及需要执行多长时间。一个 migration 创建了一个数据表和增加了一个索引,可能会产生如下的索引:

==  CreateProducts: migrating =================================================

-- create_table(:products)

   -> 0.0028s

==  CreateProducts: migrated (0.0028s) ========================================

在 migrations中有一些提供的方法,允许你去控制所有的这些:

suppress_messages() 用一个代码块来作为一个参数,停止由代码块产生的任何输出。

say() 用一个信息参数,然后打印出信息。第二个boolean 参数能够被代入到详细指定是否缩排。

say_with_time() 输出文本,具体时间由它所运行的代码块决定。如果代码块返回一个 integer, 它假设

的是所影响的行数。

例如,这个 migration:

classCreateProducts < ActiveRecord::Migration

  defchange

    suppress_messages do

      create_table :productsdo|t|

        t.string :name

        t.text :description

        t.timestamps

      end

    end

 

    say "Created a table"

 

    suppress_messages {add_index :products, :name}

    say "and an index!", true

 

    say_with_time 'Waiting for a while'do

      sleep 10

      250

    end

  end

end

生成如下的输出:

==  CreateProducts: migrating =================================================

-- Created a table

   -> and an index!

-- Waiting for a while

   -> 10.0013s

   -> 250 rows

==  CreateProducts: migrated (10.0054s) =======================================

如果你想让 Active Record 不再输出任何东西,可以运行 rake db:migrate VERBOSE=false 将会制止所有的输出。

 

 

original url: http://guides.rubyonrails.org/migrations.html#running-migrations

0
0
分享到:
评论

相关推荐

    mongoid_rails_migrations, Mongoid的数据迁移.zip

    mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid&gt; = 4.0.0和 Rails&gt; = 4.2.0.对于 Rails&gt; = 3.2.0和 Mongoid&gt; = 3.0.0,使用版本 1.0.0.

    mongoid_rails_migrations:Mongoid的数据迁移

    Mongoid的数据迁移。 宝石文件: gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:...

    PHP Database Migrations-开源

    4. **运行迁移**:执行`migrate`命令,迁移工具会自动识别并应用未执行的迁移。 5. **回滚迁移**:若需回滚,执行`rollback`命令,工具会按顺序撤销最近的迁移。 ### 5. 应用场景 - **项目迭代**:在项目开发过程...

    Ruby on Rails_ Up and Running

    RUBY的经典之作,对其在RAILS下开发写得很详细

    Ruby on Rails: Up and Running

    《Ruby on Rails: Up and Running》是一本针对初学者和有经验开发者的技术书籍,它深入浅出地介绍了如何使用Ruby on Rails框架构建Web应用程序。Ruby on Rails(简称Rails)是基于Ruby编程语言的一个开源Web应用框架...

    nova-rails-migrations:提供命令以轻松访问Rails项目中的迁移

    适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...

    Ruby on Rails入门例子

    - **数据库迁移(Database Migrations)**:Rails使用迁移来管理数据库结构的变化。通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **...

    nonschema_migrations:在Rails应用程序中将架构与数据迁移分开

    Rails版本使用此宝石的版本Rails 4.x,4.1.x,4.2 v1.0.1(2019年6月1日发布) Rails 5.0 v2.0.1(2019年6月1日发布) Rails 5.1 v3.0.1(2019年6月1日发布) Rails 5.2 v4.0.2(2019年6月2日发布) Rails 6.0 v...

    good-migrations:在运行数据库迁移时防止Rails自动加载应用程序代码

    该gem防止Rails在运行迁移时自动加载应用程序代码,从而避免了从迁移代码引用ActiveRecord模型的常见错误。 用法 将good_migrations添加到您的gemfile中: gem 'good_migrations' 大功告成! 就是这样。 背景 在...

    中文版rails教程

    2. **数据库迁移(Database Migrations)**:Rails使用ActiveRecord和SQLite、MySQL或PostgreSQL等数据库系统交互。开发者通过编写迁移文件来定义和修改数据库结构。 3. **路由(Routing)**:Rails的路由系统根据...

    Agile Web Development with Rails 4th edition(敏捷Web开发与Rails:程序指南 第四版)

    7. **Migrations and Database Schema**: 书中详细讲解了如何使用Rails的迁移(migrations)来管理数据库结构的变化,以及如何编写有效的数据库模式(schema)。 8. **Testing**: 对于Rails应用,测试是必不可少的一...

    《Ruby On Rails》 源码 下载、导入、运行

    Rails项目通常依赖于数据库存储数据。检查`config/database.yml`文件,根据你的本地数据库设置进行适当修改。常见的数据库有SQLite、MySQL和PostgreSQL。 5. **运行数据库迁移**: 使用`rails db:migrate`命令来...

    The Rails 4 Way

    ### 关于《The Rails 4 Way》的知识点总结 #### 标题:The Rails 4 Way 这本书主要讲述了Ruby on Rails 4版本的核心特性和最佳实践。Ruby on Rails(简称Rails)是一个用Ruby语言编写的开源全栈Web应用框架。本书...

    Rails3常用命令行命令

    此外,Rails的迁移(Migrations)系统允许你对数据库结构进行修改,如创建新表: ```bash rake db:create # 创建数据库 rake db:migrate # 应用迁移文件,生成对应的数据库表 ``` Rails的scaffold命令是一个强大的...

    Ruby+for+Rails

    4. **Rails基础知识** - **模型(Model)**:代表业务逻辑和数据,与数据库交互,例如,书籍管理程序中的`Book`模型。 - **视图(View)**:负责展示用户界面,通常由HTML、CSS和ERB(Embedded Ruby)组成,用于...

    rails 项目起步示例

    4. **db**:数据库相关的文件,如迁移(migrations)用于数据库结构的版本控制。 5. **lib**:自定义库和扩展代码存放的地方。 6. **log**:应用的日志文件。 7. **public**:静态资源,如图片、CSS和JavaScript...

    Ruby on Rails中文指南

    13. **数据库迁移(Database Migrations)**:迁移允许开发者以版本控制的方式管理数据库结构的变化。 14. **AJAX和Unobtrusive JavaScript (UJS)**:Rails支持无侵入式JavaScript,通过数据属性和事件监听,使页面...

    rails向导打包

    4. **Rails 数据库迁移(Migrations)**: Migrations 是 Rails 中用于数据库结构版本控制的工具。它们允许开发者以编程方式添加、修改或删除表列,而不必直接操作 SQL。文件将涵盖创建、运行和回滚迁移,以及使用 `...

Global site tag (gtag.js) - Google Analytics