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:...
RUBY的经典之作,对其在RAILS下开发写得很详细
Ruby on Rails: Up and Running
适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...
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' 大功告成! 就是这样。 背景 在...
“PHP 数据库迁移”使您能够拥有不同版本的数据库模式。 每个迁移文件都会改变架构,这个概念来自 Ruby on Rails。 可以在所有数据库服务器上执行迁移,确保一致性和可靠性。
目前,持久性框架使用两种方法中的一种:映射或包装 。要有效地管理涉及持久性域模型的应用程序变化,必须协调数据、模式和模型...这篇文章研究的Rails模式迁移是一种把每个数据库的模式变化与基本对象模型分离的思想。
如果脚本从未在特定数据库上运行,则可以创建空的迁移 SQL 脚本并在特定数据库上运行此脚本。 迁移 sql 文件名必须包含时间戳和类似20150118140555_DatabaseStructure.sql的描述该脚本创建一个名为migrations的...
本资源是在Rails开发先行的时候确定可以运行的Rails工程,可以直接用此代码运行画面
Beginning Rails 4
允许您在非Rails项目中使用ActiveRecord迁移。 安装 将此行添加到应用程序的Gemfile中(如果没有,请运行bundle init ): gem 'active_record_migrations' gem 'sqlite3' # or 'pg', 'mysql2', ... 然后执行: ...
Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details., Tens of thousands of ...
Rails test described by RSpec
要运行迁移,请单击“ Run Rails Migration $ bundle exec rake db:migrate 已知的问题 没有任何 发行说明 1.0.0 最初发布的rails-auto-migrate 1.0.2 修复自动迁移 想要查询更多的信息 享受!
Rails中的Migration相对来说更适合做数据库的对象集合操作,而自动化的rake则是一个较好的选择,下面来浅谈Ruby on Rails下的rake与数据库数据迁移操作,需要的朋友可以参考下
gem 'strong_migrations' 并运行: bundle installrails generate strong_migrations:install “强迁移”为迁移设置了较长的语句超时,因此您可以为应用程序设置。怎么运行的当您运行有潜在危险的迁移时,您会看到...
Now in version 4, Rails is mature and powerful, and to use it effectively you need more than a few Google searches. You'll find no substitute for the guru's-eye-view of design, testing, deployment, ...