Rails中的DB Migration是通过db/migrate下的rb脚本来完成的。这些migrate的脚本可以通过手动来维护,但是推荐的方法应该让Rails自己来生成相应的rb文件。在Rails中有两种方式来生成:
1. 使用generator生成model时,同时生成对应这个model的migrate文件。例如:ruby script/generate model discount。(如果使用--skip-migration的选项则不会生成相应的migrate文件)
2. 直接使用generator来生成migrate文件,例如:ruby script/generate migration add_price_column。
migrate 文件的名称有14位的数字开头,即所谓的UTC时间(起首4位数字表示年份,然后以5组2位数字分别表示月份,日期,小时,分钟,秒数)加下划线,加上这个文件中使用的类的名称。类名称中的单词以下划线分隔。如果该migrate文件是由generate model产生的,则名称为create_加上model的复数形式。如果是由generator直接产生的则以generate命令后的参数决定。(例如:ruby script/generate migration add_price_column中产生的名称就为add_price_column)。
rake db:migrate
Rails在数据库中会维护一张
表:schema_migrations。这张表中只有一个字段:version,里面存储的是db/migrate目录下的已经成功执行的
migrate的文件的UTC编号。当执行rake
db:migrate是,Rails会查看数据库中有没有schema_migrations这张表,如果没有就会建立这张表.然后会取出这张表中的所有
的记录,即UTC编号,与db/migrate目录下的文件进行比较.如果db/migrate目录下存在数据库中没有记录的migrate文件,就会按
照顺序进行执行,并在数据库中插入相应的记录.
执行某个特定的migrate文件
如果需要执行db/migrate目录下的某个特定的migrate文件,可以使用VERSION参数,例如rake db:migrate VERSION=20080601000010
如果使用VERSION执行某个特定的migrate文件时,Rasil会按照以下的顺序进行工作:
当指定的VERSION参数比schema_migrations表中存储的最大UTC还要大,则会直接执行制定VERSION的那个migrate文件.
当指定的VERSION参数比schema_migrations表中存储的某些记录小,情况则会有些不同.Rails会从数据库中找出那些UTC编号比制定VERSION大的那些记录,并按照UTC编号从大到小undo
这些migrate文件.
分享到:
- 2008-11-18 10:50
- 浏览 1605
- 评论(0)
- 论坛回复 / 浏览 (0 / 1524)
- 查看更多
相关推荐
gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...
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.
特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova中。用法要快速打开最新的迁移,请执行以下操作: 打开命令面板Cmd...
Get your front end working with Webpack, use Postgres' features from migrations, and write unit tests for all of it. All of this within Rails 5. You'll gain the confidence to work at every level of ...
卡桑德拉迁移描述Cassandra Migrations是用于Rails应用程序的Cassandra数据库架构迁移库。 该宝石提供: 多环境数据库配置版本化的CQL模式迁移管理用于简化迁移代码的模式修改DSL 用于数据库架构管理的瑞克任务支持...
警告:good_migrations当前不适用于zeitwerk,这是Rails中的当前自动加载器实现。 参见 该gem防止Rails在运行迁移时自动加载应用程序代码,从而避免了从迁移代码引用ActiveRecord模型的常见错误。 用法 将good_...
readers should already be familiar with a few important Rails components such as bundler, migrations, models, views, and controllers. Basic knowledge of relational databases such as Ruby, HTML, and ...
RailsAsyncMigrations ActiveRecord::Migration扩展程序以一种简单直接的方式使您的迁移异步。动机创建该库的目的是为了帮助在技术水平上难以扩展的小型公司。 小型项目不需要异步迁移队列,大公司在遇到扩展问题时...
允许您在非Rails项目中使用ActiveRecord迁移。 安装 将此行添加到应用程序的Gemfile中(如果没有,请运行bundle init ): gem 'active_record_migrations' gem 'sqlite3' # or 'pg', 'mysql2', ... 然后执行: ...
在内部,我们通过此gem将这些最佳实践应用于我们的Rails应用程序,该更新更新了ActiveRecord迁移,以清楚地描述安全和不安全的DDL,并在可能的情况下提供安全的替代方法。 一些项目试图通过让代码确定意图并神奇地...
Rails 5.1 v3.0.1(2019年6月1日发布) Rails 5.2 v4.0.2(2019年6月2日发布) Rails 6.0 v5.0.2(于2019年12月10日发布)介绍非模式迁移(也称为数据迁移)是Rails迁移的另一种类型。 数据迁移的运行方式与模式迁移...
You’ll get your front-end working with the Asset Pipeline, use Postgres’ features from migrations, and write unit tests for all of it. All of this within Rails. You’ll gain the confidence to work...
$ bin/rails passwordless:install:migrations 用法 无密码创建一个名为Passwordless::Session模型。 它没有自己的User模型,它希望您创建一个模型: $ bin/rails generate model User email 然后使用以下命令指定...
非Rails(和非Ruby)项目中的Rails迁移。 什么是新的 在6.x版本中,由于增加了对Rails 6迁移的支持。 在5.x版本中,我们转向使用Rails 5迁移,而不是维护我们自己的迁移相关代码。 使用Rails 5迁移几乎可以做的任何...
没有Rails的ActiveRecord 只是在没有Rails的情况下使用... snipActiveRecord::Migrator.migrate("lib/db/migrations/")证明它有效: 您可以运行该东西以表明它将连接ruby ar-no-rails 输出: 页数:0 最后,您可以I
alexa-rails是一个Ruby宝石,它是一个可安装的rails引擎,它将为您的Ruby on Rails应用程序添加功能以处理Amazon alexa请求和响应。 安装/使用 通过将以下内容添加到您的Gemfile来执行常规Gemfile : gem 'alexa-...
生成指向任意 Rails 资源的一次性使用经过身份验证的链接。 在邮件程序中用于为用户提供一次性更新。 从应用程序中运行它 mount Tokenizer::Engine => "/tokenizer", :as => "tokenizer_engine" rake tokenizer:...
要将Project资源添加到您的应用,请首先生成一个迁移: rails g migration CreateProjects # It's crucial to write really solid migrations # croods will use your database schema to build your resources. ...
flyway-rails 用于 Rails 数据库迁移的薄包装器 ...Flyway::Rails::MIGRATION_DIRECTORY = 'path/to/your/migrations' 然后,您可以通过运行以下命令列出新的 rake 任务: $ rake -T | grep flyway
SimpleDiscussion-Ruby on Rails的论坛引擎 SimpleDiscussion是一...rails simple_discussion:install:migrations rails db:migrate 将SimpleDiscussion添加到您的User模型。 该模型必须具有name方法,该方法将用于在