【问题标题】:Ruby on Rails: How can I revert a migration with rake db:migrate?Ruby on Rails:如何使用 rake db:migrate 恢复迁移?
【发布时间】:2011-12-03 09:58:12
【问题描述】:

安装设计模型用户后,我得到了这个。

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

现在如果我 rake db:migrate 将创建用户表。

如何恢复此迁移,即如何再次使用 rake 删除用户表?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 migration rake database-migration


    【解决方案1】:

    只需运行以下命令:

    rake db:rollback
    

    【讨论】:

      【解决方案2】:

      我相信有三个选项可用于恢复迁移(它们也重叠):

      1. 下滚最近的迁移:

        rake db:migrate:down # 仅限 Rails 2。

      2. 向下滚动一个最近的迁移:

        rake db:rollback STEP=n

      3. 向下滚动以前的特定版本:

        $ rake db:migrate:down VERSION=nnn # Rails 3(也提供版本号)。

      版本号表示提交的 SHA(安全哈希算法),它是一个长的十六进制数字,类似于 886af3194768917c78e... 你可以通过 git log 看到它

      您可以使用rake -T db: 查看这些命令(和其他命令)及其说明,rails 3.2 包括:

      rake db:migrate         # Migrate the database (options: VERSION=x, VERBOSE=false)
      rake db:migrate:status  # Display status of migrations
      rake db:rollback        # Rolls the schema back to the previous version (specify steps w/ STEP=n)
      

      【讨论】:

      • 向下滚动特定版本:rake db:migrate VERSION=&lt;version number&gt;
      • 至少对于 rails 3.0.20,第一个命令是错误的。单个rake db:migrate:down 中止并显示错误消息“需要版本”。 recommended rake db:rollback 但是有效。
      • 如答案中所述,Rails 2 仅适用于第一个命令。
      • 环境变量区分大小写,所以应该是STEPVERSION
      • 澄清一下,$ rake db:migrate:down VERSION=nnn 不会下滚版本,它会下移指定的版本。
      【解决方案3】:

      运行以下命令

      rake db:migrate:down VERSION=<version>
      

      其中&lt;version&gt; 是您要恢复的迁移文件的版本号。

      例如。如果您想恢复文件名为 3846656238_create_users.rb 的迁移

      rake db:migrate:down VERSION=3846656238

      【讨论】:

      • 我收到了 UnknownMigrationVersionError 但我发现这是因为我的迁移在 db/migrate/main 内,有没有人知道解决方法让 db:migrate:down 查看特定目录或迁移子目录?
      • 这仅适用于 Rails 3 以后的版本。我的生活在 Rails 2 中。太伤心了
      • @morhook 这也适用于 rails 3。在此处查看文档guides.rubyonrails.org/v3.2/migrations.html
      • 你是对的!它适用于 rails 2 和 rails 3。感谢@Mahesh 的输入!
      【解决方案4】:

      您可以进行回滚并指定将回滚多少最后一次迁移,例如

      rake db:rollback STEP=3
      

      最后 3 次迁移。

      【讨论】:

      • 这是一种更快捷、更简单的方法,如果您想撤消最近的几次迁移,而不是查找版本号
      【解决方案5】:
      rake db:migrate:redo
      

      它将撤消并重新应用上次迁移。

      【讨论】:

        【解决方案6】:

        作为一个新程序员(或其他新程序员)

        rake db:rollback 工作时间大约有一半。我从那里开始。

        如果没有,rake db:migrate:down VERSION=3846656238

        为您要恢复的迁移文件的版本号插入 VERSION。

        【讨论】:

          【解决方案7】:

          在终端中运行此命令:

          rake db:migrate:status
          

          bundle exec rake db:migrate:status
          

          它显示了我们之前运行的所有迁移的状态、迁移 ID、迁移名称。选择您的迁移 id(即您的版本号)并将该 id 放在以下命令中 version= ,, 之后,然后按 enter

          bundle exec rake db:migrate:down VERSION=
          

          【讨论】:

            【解决方案8】:

            对于rails 5,我们可以使用rails command instead of rake

            rails db:migrate:down VERSION=<version>
            

            例子

            rails db:migrate:down VERSION=20170330090327

            【讨论】:

              【解决方案9】:

              如何回滚迁移

              (1)首先识别迁移ID

              rake db:migrate:status

              • 复制 ID 号。

              (2) 然后回滚迁移

              rake db:migrate:down VERSION=20190802023239

              • 粘贴上面的相关 ID 号。当然,在您的情况下,迁移 ID 会有所不同!使用正确的迁移 ID。

              .......现在你要去参加比赛了!

              【讨论】:

                猜你喜欢
                • 2017-01-07
                • 1970-01-01
                • 1970-01-01
                • 2011-04-29
                • 2013-12-28
                • 2016-03-08
                • 2011-05-22
                • 1970-01-01
                • 2015-01-11
                相关资源
                最近更新 更多