rake db migrate中的版本是什么

时间:2014-04-12 20:33:10

标签: ruby-on-rails ruby ruby-on-rails-4

我是fairly new to ruby and ROR。我有几个关于迁移的问题。我看了看指南,但对我来说很困惑。

http://guides.rubyonrails.org/migrations.html

class CreateUserModel < ActiveRecord::Migration
  def self_up 
    create_table :users do |t|
      t.column :username, :string
      t.column :email, :string
      t.column :password_hash, :string
      t.column :password_salt, :string
    end

  def self_down
    drop_table :users
  end
end
  1. 当我搜索谷歌时,我发现在此命令上运行迁移rake db:migrate VERSION=20098252345。我很困惑这个VERSION在做什么 用命令。我刚刚创建了一个迁移0001_create_user_model.rb
  2. 上面是我的migration表。它是什么时候我创造的 运行/执行此文件。它会为我创建表格和模型吗?

2 个答案:

答案 0 :(得分:1)

rake命令的版本实际上是年,月等的时间戳... 这是为了指定您想要迁移的距离。

您在任何典型应用中都有许多迁移文件。由于所有这些迁移都会对数据库模式进行更改(即表,表名,表的属性列等)

Rails通过逐步构建迁移来处理定义模式(即创建表并指定表所具有的属性和列)。

这样可以方便地通过回滚和向前迁移来编辑架构......就像任何版本控制系统一样。

现在,您可以指定一个版本来指定您希望实际迁移到哪个迁移&#34;迁移&#34;将模式定义为...或者您可以运行rake db:migrate将所有迁移文件运行到最后一个。我通常没有具体指定版本,因为我通常会运行所有迁移到最新版本。这只是一个选择。如果您需要回滚某些迁移并更改某些内容,则会有rake db:rollback等命令,其中包含指定步骤数等的各种选项,您也可以使用这些命令。

这通常有效。如果您的模型中有数据表中的数据记录(即行)验证,则可能会遇到迁移问题,您可以在http://guides.rubyonrails.org/migrations.html

的第6部分中详细了解这些问题。

答案 1 :(得分:1)

20098252345中的rake db:migrate VERSION=20098252345只是一个位于db/migrate目录中的迁移文件的前缀数字。只有一个UTC timestamp(YYYYMMDDHHMMSS)来区分一个文件另一个。生成的迁移文件将如下所示20098252345_create_user_model.rb

来自Guides

内部Rails仅使用迁移的编号(时间戳)来识别它们。在Rails 2.1之前,迁移号从1开始,每次生成迁移时都会递增。对于多个开发人员来说,这些冲突很容易让您回滚迁移并重新编号。使用Rails 2.1+,通过使用迁移的创建时间来识别它们,可以在很大程度上避免这种情况。您可以通过将以下行添加到config / application.rb来恢复到旧的编号方案。

config.active_record.timestamped_migrations = false

希望它有所帮助!