Râteau abandonnée... table 'utilisateurs' existe déjà
J'ai créé une base de données avec le concevoir et le générateur astucieux. Je suis en train de faire une nouvelle base de données avec le générateur astucieux (rails g nifty:scaffold Asset user_id:integer
), mais lorsque je tente de migrer la base de données (rake db:migrate
), j'obtiens l'erreur suivante:
charlotte-dator:showwwdown holgersindbaek$ rake db:migrate
== DeviseCreateUsers: migrating ==============================================
-- create_table(:users)
rake aborted!
An error has occurred, all later migrations canceled:
Mysql2::Error: Table 'users' already exists: CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `email` varchar(255) DEFAULT '' NOT NULL, `encrypted_password` varchar(128) DEFAULT '' NOT NULL, `reset_password_token` varchar(255), `reset_password_sent_at` datetime, `remember_created_at` datetime, `sign_in_count` int(11) DEFAULT 0, `current_sign_in_at` datetime, `last_sign_in_at` datetime, `current_sign_in_ip` varchar(255), `last_sign_in_ip` varchar(255), `name` varchar(255), `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Je suis en suivant un tutoriel, et ont bien du mal à comprendre pourquoi cela se produit. Quelqu'un peut-il expliquer ce qui se passe?
Vous devez vous connecter pour publier un commentaire.
La migration est d'essayer de créer une table qui existe déjà dans votre base de données.
Essayez de supprimer l'utilisateur de la table de votre base de données. Quelque chose s'est mal passé avec vous le processus de migration. Il faut également comparer votre schéma.rb version avec votre db/migrate/*.rb fichiers.
Précisions:
Il semble que beaucoup de SORTE que les utilisateurs ne sont pas d'accord avec ma réponse, soit parce qu'ils considèrent que c'est inexacte ou n'est pas recommandé.
La suppression d'un tableau est toujours destructrice, et je pense que tout le monde comprend cela.
Je devrais avoir mentionné add_column, depuis que le tableau a été créé dans un autre fichier de migration.
Dans votre
create_users
migration (APP_ROOT/db/migrate/..), ajouterdrop_table :users
juste avantcreate_table :users
et exécuterrake db:migrate
. Il va supprimer la table des utilisateurs avant de le recréer. Vous pouvez supprimer cette ligne de code après l'exécution de cette migration, donc il ne fait pas de vous donner des erreurs plus tard. Juste un petit correctif si vous n'avez pas d'INTERFACE utilisateur l'accès à une base de données (sur heroku, par exemple).Vous avez besoin de déplacer la table sql lite console (Vous aurez perdu toutes les données contenues dans celui-ci)
Accès sql lite console, tapez dans le terminal
mysql <DB NAME HERE>
Drop table (ne pas oublier le dernier ; (point-virgule))
drop table table_name;
exécuter db:migrate nouveau
bin/rake db:migrate
Espérons que cela aide, il a travaillé pour moi
Si vous voulez jouer la sécurité et ne voulez pas perdre toutes les données, alors vous pouvez vérifier si la table existe dans votre base de données.
Si vous connaissez la base de données a été correctement créé, vous pouvez simplement commenter la création de la partie de la migration de code. Par exemple:
Si la table a été créée, mais plus tard, les commandes n'étaient pas terminé pour une raison quelconque, vous pouvez simplement laisser le plus tard options par exemple:
Si vous n'avez pas de données importantes dans votre base de données afin de préserver cependant, vous pouvez juste avoir tomber de la table et toutes les données et de créer de la fraîcheur. Par exemple (avis le "drop_table :les voix", dans le soi.jusqu'):
Ne pas supprimer des tables. Données > les migrations!
La version de la base de données déjà reflète les changements dans l'erreur provoquant la migration est d'essayer d'ajouter. En d'autres termes, si la migration peut être sauté, alors tout irait bien. De vérifier la db_schema_migrations table et essayez d'insérer la version erronée de la migration (e.x, 20151004034808). Dans mon cas, cela a causé des migrations ultérieures à exécuter parfaitement et tout semble bien fonctionner.
Toujours pas sûr de ce qui a causé ce problème.
Je pense que c'est un problème unique ou de plusieurs communes de mysql dans les rails, possible d'avoir à faire avec la mysql2 bijou lui-même.
Je le sais parce que j'ai juste changé à partir de sqlite à mysql et juste commencé à avoir ce problème de manière systématique.
Dans mon cas, j'ai simplement commenté le code qui ont déjà couru et couru à nouveau la migration (dont je ne suis pas ajouter plus de détails à parce qu'on dirait que le gars au dessus de moi n'a que).
J'ai eu un problème similaire lorsque vous essayez d'ajouter Concevoir l'authentification à une table des Utilisateurs.
Ma solution: j'ai trouvé que j'avais deux migrer les fichiers, tous les deux en train de créer la table des Utilisateurs. Donc, plutôt que de les supprimer de la table (probablement pas la meilleure habitude à la forme), j'ai commenté la première (d'origine) migrent vers le fichier qui a créé la table des Utilisateurs, puis à gauche la Concevoir migrer fichier-est. Re-couru à la migration et il a bien fonctionné.
Comme il s'avère, le dispositif de fichier n'était pas à l'origine du problème; je peux voir que c'est "évolution" de la table, pas de "création", ce qui signifie que, même sans le concevoir de montage, un db:migrate aurait probablement causé le même problème (bien que je n'ai pas testé).
Si vous voulez garder vos données, renommer la table, mais le faire dans la migration pour gagner du temps, puis l'enlever une fois la migration a couru.
Place à la partie supérieure de la jusqu' section du fichier de migration.
Si votre application est nouvelle, et vous n'avez pas de soins sur les données dans votre base de données, il suffit de: