【发布时间】:2016-12-27 06:20:27
【问题描述】:
我创建了一个用户表并将其迁移到 Heroku,它运行良好。我试图添加一个管理表,但出了点问题,我不确定发生了什么。 users 和 admins 表在我的本地环境中都可以正常工作,但是当我将迁移推送到 Heroku 时,我收到一个错误,即 users 表已经创建:
迁移到 DeviseCreateUsers (20151119150443) == 20151119150443 DeviseCreateUsers:迁移 ================================ -- create_table(:users) PG::DuplicateTable: 错误: 关系 "users" 已经存在 : CREATE TABLE "users" ("id" 序列主键, “电子邮件”字符变化(255)默认''非空, “encrypted_password”字符变化(255)DEFAULT '' NOT NULL, “reset_password_token”字符变化(255), “reset_password_sent_at”时间戳,“remember_created_at”时间戳, "sign_in_count" 整数 DEFAULT 0 NOT NULL, "current_sign_in_at" 时间戳,“last_sign_in_at”时间戳,“current_sign_in_ip”字符 变化(255),“last_sign_in_ip”字符变化(255),“created_at” timestamp NOT NULL, "updated_at" timestamp NOT NULL) rake 中止! StandardError:发生错误,此迁移和所有后续迁移 取消:
PG::DuplicateTable: 错误: 关系“用户”已经存在 : CREATE 表“用户”(“id”序列主键,“电子邮件”字符变化(255) DEFAULT '' NOT NULL,“encrypted_password”字符变化(255) DEFAULT '' NOT NULL,“reset_password_token”字符变化(255), “reset_password_sent_at”时间戳,“remember_created_at”时间戳, "sign_in_count" 整数 DEFAULT 0 NOT NULL, "current_sign_in_at" 时间戳,“last_sign_in_at”时间戳,“current_sign_in_ip”字符 变化(255),“last_sign_in_ip”字符变化(255),“created_at” 时间戳非空,“updated_at”时间戳非空) /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.1.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `async_exec'
这是我在本地检查迁移状态时所说的:
Status Migration ID Migration Name
--------------------------------------------------
up 20151103020350 Create restaurants
up 20151119150443 Devise create users
up 20160809004949 Devise create admins
heroku 上的迁移状态:
Status Migration ID Migration Name
--------------------------------------------------
up 20151030033303 ********** NO FILE **********
up 20151102165952 ********** NO FILE **********
up 20151102170119 ********** NO FILE **********
up 20151103020350 Create restaurants
up 20151103160832 ********** NO FILE **********
up 20151103170143 ********** NO FILE **********
up 20151105172014 ********** NO FILE **********
up 20151114043509 ********** NO FILE **********
down 20151119150443 Devise create users
down 20160809004949 Devise create admins
当我进入 Heroku 控制台时,它说我有 2 个用户,因此用户表已迁移,但迁移状态显示为关闭。
我不介意丢失用户表中的数据,但我真的不想丢失餐厅表中的数据。不知道如何解决这个问题。
【问题讨论】:
-
Devise 为您创建用户表。您只应该在 Devise 自己创建的内容之上添加您的应用程序需要的任何列。在这种情况下,您确实是在尝试创建 Devise 已经创建的表。
-
@MarsAtomic - 我使用设计创建用户表,它工作正常。我尝试添加一个管理表,但它不起作用,因为即使我运行了该迁移,它也出于某种原因显示用户迁移。我不知道为什么会发生这种情况,也不知道如何在不丢失所有数据的情况下修复它。
-
重点是,除了
rails g devise user之外,您不应该为创建用户表其他 进行任何迁移。如果您有其他字段要添加到 users 表中,那么您将有'rails g migration AddWhateverToUsers后跟rails g devise admin来添加 Devise for admins。根据您发布的迁移,您似乎正在尝试创建用户表两次。请查看设计documentation。
标签: ruby-on-rails heroku