Rails SQLite3重复列 - 树屋教程

时间:2012-12-03 04:27:05

标签: ruby-on-rails ruby sqlite devise

我刚刚开始使用简单Ruby应用程序的Treehouse教程。为了给出上下文,我之前不得不删除并重新开始这个项目,我删除了主应用程序文件夹并重新开始。

在本教程之后,我们创建了一个用户数据库,其中包括所有包含Devise的表(:email,:name等)。我得到的错误表明我有一个重复的列名。在审核和修改之后,我尝试将问题列注释掉,以查看在迁移过程中是否会继续前进,但它只会为下一行提供相同的错误。

有几次我试图删除数据库,重新创建并重新迁移,但我遇到了同样的问题。

理想情况下,我想删除数据库并重新创建它们,但这似乎不是我能做的事情。

这是错误:

SQLite3::SQLException: duplicate column name: email: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL
/Users/pbj/Desktop/code/rails/treebook/db/migrate/20121130035155_add_devise_to_users.rb:5:in `block in up'
/Users/pbj/Desktop/code/rails/treebook/db/migrate/20121130035155_add_devise_to_users.rb:3:in `up'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

当我从Devise生成用户集时,它还给了我create_status.rb,devise_create_user.rb和add_devise_to_users.rb(这是有问题的文件)。删除Devise并重新开始的想法在我脑海中浮现,但我已经做了那些让我遇到这个新错误的事情。

道歉,如果这对所有体验程序员来说都是有些初步的,但如上所述,我正在学习,但是刚刚离开了本教程的原始路径。

感谢任何和所有帮助。

3 个答案:

答案 0 :(得分:1)

我认为,尽管您已db/migrate/0000-00000_create_user.rb,但已向模型添加了另一个add_email_to_users迁移。因此,请检查db / migration文件夹中的create_user.rb并查看是否已存在电子邮件列,然后检查db / migrate文件夹中的其他迁移文件,如add_email_to_users.rb,如果您发现了这样的额外{{1}然后删除它。

最后重命名/删除您的add_email migration文件,并从头开始尝试development.sqlite3

这可能有助于您解决问题。

答案 1 :(得分:0)

我正在采用相同的方法,我认为错误在于Ruby 4刚出来,它在migrate目录中有一个重复的行,我删除然后运行rake db:migrate。它运作得很好。

答案 2 :(得分:0)

您的错误消息说:

duplicate column name: email: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL

您的迁移文件(随后是一些随机数...)_ add_devise_to_users.rb正在添加您现在应该注释掉的这些行

# t.string :email,              null: false, default: ""

# add_index :users, :email,                unique: true

这将允许您现在使用此命令进行迁移

rake db:migrate

如果您仍在苦苦挣扎并且不介意破坏和重新创建数据库,那么您可以这样做以重新开始

rake db:drop db:create db:migrate

希望这有帮助!