ruby-on-rails - drop - ruby on rails rollback migration
rake db: migrate no está funcionando (3)
Intente reconstruir la estructura de su base de datos ( ADVERTENCIA: todos los datos de la base de datos se perderán):
rake db:drop:all
rake db:create:all
rake db:migrate
Si usa Rails <4.1, no olvide preparar la base de datos de prueba:
rake db:test:prepare
Esta es la solución más fácil ya que está trabajando con un tutorial. Sin embargo, en producción o teniendo datos importantes en desarrollo, debería tomar tiempo para investigar el problema. En este caso, lo más probable es que haya creado una migración vacía, ejecutó rake db:migrate
, luego agregó instrucciones a la migración, por lo que no ve un nuevo campo y rake db:migrate
no hace nada. Para resolver este problema, debe comentar sus instrucciones de change
, realizar rake db:rollback
, descomentar las instrucciones y luego rake db:migrate
para aplicar las instrucciones que no encontró.
Estoy trabajando a través del tutorial de rieles y me he quedado atascado. Comenzando en el listado 8.16, he realizado las siguientes modificaciones en <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
La guía luego dice que actualice dev & test db como siempre:
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare
Mi prueba de usuario para el * remember_token * sigue fallando, así que eché un vistazo a la tabla de usuarios en dev y la base de datos de pruebas con la línea de comandos sqlite3. Se ven así:
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");
Parece que mi migración aún no se ha ejecutado, pero no sé cómo forzarla a ejecutarse.
Retroceda y luego vuelva a ejecutar la migración que podría funcionar.
rake db:rollback
Y después de retroceder, vuelve a ejecutar tus migraciones.
Tuve el mismo problema que la pregunta inicial. $ bundle exec rake db:migrate
migrate no estaba agregando record_token a .db y la respuesta de Latha Doddikadi funcionó para mí.
Yo si:
rake db:rollback
y entonces:
$ bundle exec rake db:migrate
que agregó el campo remember_token a la base de datos seguido por:
bundle exec rspec spec/models/user_spec.rb
que pasó
Finished in 0.92841 seconds
21 examples, 0 failures