web-dev-qa-db-fra.com

rake db: migrate ne fonctionne pas

Je travaille sur le tutoriel Rails et je suis resté bloqué. À partir du Listing 8.16, j'ai apporté les modifications suivantes à <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

Le guide dit ensuite de mettre à jour dev & test db comme d'habitude:

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

Mon test utilisateur pour le * Remember_token * échoue toujours, j'ai donc jeté un œil à la table tilisateur dans dev et teste la base de données avec la ligne de commande sqlite3. Ils ressemblent à ceci:

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

Il semble que ma migration n'ait pas encore été exécutée mais je ne sais pas comment la forcer à s'exécuter.

19
hippeelee

Essayez de reconstruire la structure de votre base de données (AVERTISSEMENT: toutes les données db seront perdues):

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

Si vous utilisez Rails <4.1, n'oubliez pas de préparer la base de données de test:

rake db:test:prepare

Il s'agit de la solution la plus simple puisque vous travaillez avec un didacticiel. Cependant, en production ou ayant des données importantes en développement, vous devriez prendre le temps d'étudier le problème. Dans ce cas, vous avez probablement créé une migration vide, exécuté rake db:migrate, puis a ajouté des instructions à la migration, de sorte que vous ne voyez pas un nouveau champ et plus loin rake db:migrate ne fait rien. Pour résoudre ce problème, vous devez commenter vos instructions change, effectuez rake db:rollback, supprimez les commentaires, puis rake db:migrate pour appliquer les instructions que vous avez manquées.

43
Rustam A. Gasanov

J'avais le même problème que la question initiale. $ bundle exec rake db:migrate n'ajoutait pas Remember_token au .db et la réponse de Latha Doddikadi a fonctionné pour moi.

J'ai fait:

rake db:rollback

puis:

$ bundle exec rake db:migrate

qui a ajouté le champ Remember_token à la base de données suivi de:

bundle exec rspec spec/models/user_spec.rb

qui a passé.

Finished in 0.92841 seconds
21 examples, 0 failures
4
Livi17

Revenez en arrière, puis relancez la migration, cela pourrait fonctionner.

     rake db:rollback

Et après avoir reculé, relancez vos migrations.

2
Maddy