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
相关推荐
mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid> = 4.0.0和 Rails> = 4.2.0.对于 Rails> = 3.2.0和 Mongoid> = 3.0.0,使用版本 1.0.0.
Mongoid的数据迁移。 宝石文件: gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:...
4. **运行迁移**:执行`migrate`命令,迁移工具会自动识别并应用未执行的迁移。 5. **回滚迁移**:若需回滚,执行`rollback`命令,工具会按顺序撤销最近的迁移。 ### 5. 应用场景 - **项目迭代**:在项目开发过程...
RUBY的经典之作,对其在RAILS下开发写得很详细
《Ruby on Rails: Up and Running》是一本针对初学者和有经验开发者的技术书籍,它深入浅出地介绍了如何使用Ruby on Rails框架构建Web应用程序。Ruby on Rails(简称Rails)是基于Ruby编程语言的一个开源Web应用框架...
适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...
- **数据库迁移(Database Migrations)**:Rails使用迁移来管理数据库结构的变化。通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **...
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...
该gem防止Rails在运行迁移时自动加载应用程序代码,从而避免了从迁移代码引用ActiveRecord模型的常见错误。 用法 将good_migrations添加到您的gemfile中: gem 'good_migrations' 大功告成! 就是这样。 背景 在...
2. **数据库迁移(Database Migrations)**:Rails使用ActiveRecord和SQLite、MySQL或PostgreSQL等数据库系统交互。开发者通过编写迁移文件来定义和修改数据库结构。 3. **路由(Routing)**:Rails的路由系统根据...
7. **Migrations and Database Schema**: 书中详细讲解了如何使用Rails的迁移(migrations)来管理数据库结构的变化,以及如何编写有效的数据库模式(schema)。 8. **Testing**: 对于Rails应用,测试是必不可少的一...
Rails项目通常依赖于数据库存储数据。检查`config/database.yml`文件,根据你的本地数据库设置进行适当修改。常见的数据库有SQLite、MySQL和PostgreSQL。 5. **运行数据库迁移**: 使用`rails db:migrate`命令来...
### 关于《The Rails 4 Way》的知识点总结 #### 标题:The Rails 4 Way 这本书主要讲述了Ruby on Rails 4版本的核心特性和最佳实践。Ruby on Rails(简称Rails)是一个用Ruby语言编写的开源全栈Web应用框架。本书...
此外,Rails的迁移(Migrations)系统允许你对数据库结构进行修改,如创建新表: ```bash rake db:create # 创建数据库 rake db:migrate # 应用迁移文件,生成对应的数据库表 ``` Rails的scaffold命令是一个强大的...
4. **Rails基础知识** - **模型(Model)**:代表业务逻辑和数据,与数据库交互,例如,书籍管理程序中的`Book`模型。 - **视图(View)**:负责展示用户界面,通常由HTML、CSS和ERB(Embedded Ruby)组成,用于...
4. **db**:数据库相关的文件,如迁移(migrations)用于数据库结构的版本控制。 5. **lib**:自定义库和扩展代码存放的地方。 6. **log**:应用的日志文件。 7. **public**:静态资源,如图片、CSS和JavaScript...
13. **数据库迁移(Database Migrations)**:迁移允许开发者以版本控制的方式管理数据库结构的变化。 14. **AJAX和Unobtrusive JavaScript (UJS)**:Rails支持无侵入式JavaScript,通过数据属性和事件监听,使页面...
4. **Rails 数据库迁移(Migrations)**: Migrations 是 Rails 中用于数据库结构版本控制的工具。它们允许开发者以编程方式添加、修改或删除表列,而不必直接操作 SQL。文件将涵盖创建、运行和回滚迁移,以及使用 `...