我刚刚开始使用简单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并重新开始的想法在我脑海中浮现,但我已经做了那些让我遇到这个新错误的事情。
道歉,如果这对所有体验程序员来说都是有些初步的,但如上所述,我正在学习,但是刚刚离开了本教程的原始路径。
感谢任何和所有帮助。
答案 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
希望这有帮助!