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
回滚后重新运行迁移。
- Rspec错误,“nil的未定义方法’downcase’:NilClass”
- 为什么carrierwave导致NameError:未初始化的常量Micropost :: PictureUploader错误?
- Hartl Ruby on Rails教程4 ch 10,用户编辑测试失败
- 未定义的方法`save’使测试在测试结束前失败
- 无法在rails教程中播种数据库
- RailsTutorial 3.2 Ch 9 – “before {valid_signin(user)}”导致RSpec测试失败
- Michael Hartl的Rails 3教程:has_password问题? 第7章中的方法
- Ruby(on Rails)语法
- RailsTutorial.org – 用户中的ExecJS :: RuntimeError #index