2012-03-27 57 views
17

我正在通過rails tutorial並且陷入困境。在清單8.16我已經做了以下修改開始<timestamp>_add_remember_token_to_users.rbrake db:migrate無法正常工作

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

然後指導說要更新開發&測試數據庫和往常一樣:

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

我的用戶測試的* remember_token *仍然因此我使用命令行sqlite3在dev和test數據庫中查看了用戶表。他們看起來像這樣:

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"); 

這似乎是我的遷移尚未運行,但我不知道如何強制它運行。

+0

rake任務的輸出是什麼? – jdl 2012-03-27 19:47:12

+0

如果你的意思是運行bundle exec rake db之後有什麼輸出:migrate - 沒有輸出,只是一個新提示。 – hippeelee 2012-03-27 20:01:46

回答

42

嘗試重建你的數據庫結構(警告:所有DB-數據都將丟失):

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

如果您使用Rails的< 4.1,別忘了準備測試數據庫:

rake db:test:prepare 

這是最簡單的解決方案,因爲您正在使用教程。但是在生產中或者正在開發重要數據時,您應該花時間調查問題。在這種情況下,您很可能創建了一個空遷移,運行rake db:migrate,然後向遷移添加了說明,因此您不會看到新的字段,並且rake db:migrate不會執行任何操作。要解決此問題,您需要評論您的change說明,執行rake db:rollback,取消註釋說明,然後rake db:migrate應用您錯過的說明。

+0

這確實解決了我的數據庫問題。謝謝。儘管如此,我的所有測試都開始失敗,直到我記得重新運行$ bundle exec rake db:test:prepare – hippeelee 2012-03-27 20:22:49

+0

這有效。只需要更新來爲Rails 5.1做bundle rails db {...}。實際上,bundle exec部分甚至可以是可選的。 – VisWebsoft 2017-12-04 18:46:02

2

回滾,然後重新運行它可能工作的遷移。

 rake db:rollback 

回滾後再次運行您的遷移。

4

我和最初的問題有同樣的問題。 $ bundle exec rake db:migrate沒有在.db中添加remember_token,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