rake db:migrate不起作用

我正在通过rails教程并且遇到困难。 从代码清单8.16开始,我对_add_remember_token_to_users.rb进行了以下修改:

 class AddRememberTokenToUsers < ActiveRecord::Migration def change add_column :users, :remember_token, :string add_index :users, :remember_token end end 

然后该指南说像往常一样更新dev&test db:

 $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare 

我对* remember_token *的用户测试仍然失败,所以我看了dev中的用户表,用命令行sqlite3测试数据库。 它们看起来像这样:

 sqlite> .schema users CREATE TABLE "users" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "password_digest" varchar(255)); CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email"); 

似乎我的迁移尚未运行,但我不知道如何强制它运行。

尝试重建您的数据库结构( 警告:所有db-data都将丢失):

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

如果您使用Rails <4.1,请不要忘记准备测试数据库:

 rake db:test:prepare 

这是您使用教程后最简单的解决方案。 但是在生产中或在开发中有重要数据时,您应该花时间调查此问题。 在这种情况下,您很可能创建了一个空迁移,运行rake db:migrate ,然后向rake db:migrate添加了指令,因此您没有看到新字段并且进一步rake db:migrate不执行任何操作。 要解决此问题,您需要注释您的change说明,执行rake db:rollback ,取消注释说明,然后rake db:migrate以应用您错过的指令。

我和最初的问题有同样的问题。 $ bundle exec rake db:migrate没有将remember_token添加到.db和Latha Doddikadi的回答对我有用。

我做了:

 rake db:rollback 

然后:

 $ bundle exec rake db:migrate 

它将remember_token字段添加到数据库,后跟:

 bundle exec rspec spec/models/user_spec.rb 

过去了。

 Finished in 0.92841 seconds 21 examples, 0 failures 

回滚然后重新运行它可能工作的迁移。

  rake db:rollback 

回滚后重新运行迁移。