rake db:миграция не работает

Я работаю через учебник 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 и тестов с командной строкой 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");

похоже, что моя миграция имеет не убежать, но я не знаю как заставить его работать.

3 ответов


попробуйте перестроить структуру базы данных (предупреждение: все db-данные будут потеряны):

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

если вы используете Rails

rake db:test:prepare

это самое простое решение, так как вы работаете с учебником. Однако при производстве или наличии важных данных в разработке вы должны потратить время на изучение проблемы. В этом случае вы, скорее всего, создали пустую миграцию, ran rake db:migrate, затем добавлены инструкции к миграция, поэтому вы не видите новое поле и далее rake db:migrate ничего не делает. Чтобы решить эту проблему, вам нужно прокомментировать ваш change инструкции, выполнять rake db:rollback раскомментируйте инструкции, а затем rake db:migrate чтобы применить инструкции, которые вы пропустили.


у меня была та же проблема, что и первоначальный вопрос. $ bundle exec rake db:migrate не добавлял remember_token к.ответ DB и лафа 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

и после отката опять запустить перенос.