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
и после отката опять запустить перенос.