【问题标题】:rake db:reset ignores changes to migrationrake db:reset 忽略迁移的更改
【发布时间】:2014-08-01 21:48:20
【问题描述】:

我有一个指定 mySQL 列大小的迁移:

class CreateEntities < ActiveRecord::Migration
  def change
    create_table :entities do |t|
      ...
      t.string  :telephone, limit: 50
      ...
    end
  end
end

最初,这个限制是20

我似乎无法将此新限制应用于数据库。

我试过了:

> rake db:reset

还有

> rake db:drop
> rake db:setup

旧值仍然存在。

我也删除了schema.rb 文件,但是当它重新创建时,它仍然包含旧值:

ActiveRecord::Schema.define(version: 20140718164541) do

    create_table "entities", force: true do |t|
      ...
      t.string   "telephone",     limit: 20
      ...
    end

如果重要的话,我正在使用 Git。

【问题讨论】:

    标签: mysql ruby-on-rails git ruby-on-rails-4 migration


    【解决方案1】:

    rake db:reset 不会重新运行您的迁移。它清除数据库,加载模式,然后设置任何种子。要更改已存在的列的限制,您应该创建一个更改该列的新迁移:

    class ChangeEntitiesTelephoneLimit < ActiveRecord::Migration
      def change
        change_column :entities, :telephone, :string, limit: 50
      end
    end
    

    如果您真的想重复使用相同的迁移,请删除并重新创建数据库,然后运行迁移:

    rake db:drop
    rake db:create
    rake db:migrate
    

    【讨论】:

    • 如果迁移是最近的迁移之一,您还可以执行rake db:rollback STEP=N 回滚N 迁移。然后进行更改并重新运行迁移。
    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多