web-dev-qa-db-ja.com

rake db:migrateが機能していません

私はRailsチュートリアルを進めていて、行き詰まっています。リスト8.16から始めて、<timestamp>_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のserテーブルを確認し、コマンドライン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");

移行はまだ実行されていないようですが、強制的に実行する方法がわかりません。

19
hippeelee

データベース構造を再構築してみてください(警告:すべての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見逃した指示を適用します。

43

最初の質問と同じ問題がありました。 $ bundle exec rake db:migrateは、remember_tokenを.dbに追加していませんでした。LathaDoddikadiの回答がうまくいきました。

やった:

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
4
Livi17

ロールバックしてから、正常に機能する可能性のある移行を再実行します。

     rake db:rollback

そして、ロールバックした後、マイグレーションを再度実行します。

2
Maddy