是否可以混合迁移文件而不会产生有害后果?

时间:2013-05-23 09:39:38

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

让我解释一下:

我跟着M. Hartl tutorial跟我一样喜欢迁移。所以现在,我的db / migrate目录中有以下文件(我为你节省了时间戳):

create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

add_index_to_users_email.rb

class AddIndexToUsersEmail < ActiveRecord::Migration
  def change
    add_index :users, :email, unique: true
  end
end

add_password_digest_to_users.rb

class AddPasswordDigestToUsers < ActiveRecord::Migration
  def change
    add_column :users, :password_digest, :string
  end
end

add_remember_token_to_users.rb

class AddRememberTokenToUsers < ActiveRecord::Migration
  def change
    add_column :users, :remember_token, :string
    add_index :users, :remember_token
  end
end

add_admin_to_users.rb

class AddAdminToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

是否可以将所有内容混合到 create_users.rb 中,如下所示,并删除其他迁移文件而不会对我的应用造成任何损害?

create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :password_digest
      t.string :remember_token
      t.boolean :admin, default: false

      t.timestamps
    end
    add_index :users, :email, unique: true
    add_index :users, :remember_token
  end
end

1 个答案:

答案 0 :(得分:1)

是的,有可能。一个直截了当的策略可能是:

  1. 为了避免数据丢失,请使数据库变得愚蠢(创建数据库备份)
  2. 删除并重新创建数据库:

    rake db:drop db:create
    
  3. 将所有迁移合并到一个文件中,就像您已经显示

  4. 一样
  5. 执行命令

    rake db:migrate
    
  6. 恢复数据库备份

  7. 但是,如果已经在生产中部署了应用程序,这可能会变得棘手。