mysql - rake 数据库 :reset ignores changes to migration

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

我有一个指定 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。

最佳答案

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

关于mysql - rake 数据库 :reset ignores changes to migration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25089170/

相关文章:

mysql - 终端 INSERT 到 MySQL 不工作

ruby-on-rails - 回形针不调整图像大小或创建样式目录

ruby-on-rails - Rails 3.1 中的 ActiveAdmin Assets 问题

xcode - 不能 Git Blame 文件

git - 无法 `git submodule foreach git pull`

mysql - Xampp 不适用于 Mac X

mysql - 如何仅通过一种模式查找客户的所有交易

ruby-on-rails - 如何使用fakeredis清除测试环境中的Redis数据库?

linux - 外部端口/ip 上的 ssh(和 git)身份验证问题(本地 ip 工作正常)

php - 不使用 mysql_insert_id() 获取最后插入记录的 id