IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

rake db migrate genere une erreur


Sujet :

Ruby on Rails

  1. #1
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut rake db migrate genere une erreur
    Bonjour à tous,

    Je voudrais rajouter une colonne dans une table, le numéro de cette nouvelle migration est 006, le fichier est bien créé.
    Le probleme se pose en fait lorsque je lance la commande En effet, une erreur apparaît au niveau de la migration 005 (create_table)

    L'erreur m'indique que la table existe déjà -> comme si je ne le savais pas !!

    Est ce que la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rake db:migrate VERSION=006
    pourrais forcer la migration de la DB avec le fichier 006 sans passer par la 005 ??

    Sinon, que pourrais je faire pour migrer ma DB correctement ?
    Y a t'il un fichier que je pourrais modifier pour faire comprendre à rails qu'il faut continuer sur la migration 006 en zappant la 005 ?

    En espérant avoir été suffisamment clair, merci d'avance pour votre aide
    24 hours a day ... never enough

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Bonjour

    Tu as du te tromper quelque part en faisant tes migrations pour avoir ce genre d'erreurs, ou créer une table à la main qui est redéfinie dans une migration...

    Dans ta base, tu as une table schema_info, qui stocke le numéro courant de migration.

    Normalement, si tu as un total de 6 migrations, et que le numéro stocké est 4, rake db:migrate n'exécutera que les deux dernières migrations. Eventuellement, vides complètement ta base, et relance un cycle de migration complet, histoire d'être sûr de repartir sur de bonnes bases...
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Bonjour

    Vider ma DB pour recommencer les migration ... c'est tout à fait ce que je voudrais éviter, car je devrai à nouveau remplir les tables manuellement ?

    Quid si je change le nombre dans la table schema_info ??

    Mais bon, si c'est la seule des solutions ...

    Petite question supplémentaire :
    Si je lance un cycle complet de migration, dois je le faire pour chaque fichier ou le fait de le faire une seule fois suffit à tout recréer ?
    24 hours a day ... never enough

  4. #4
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    En fait, si tu ne veux pas recréer complètement ra DB, il faudrai savoir pourquoi ce soucis est apparu... tu n'as rien créer à la main, ... ?

    quelle est ta migration 5, et que doit-elle faire ?

    Pour peupler ta base avec des données initiales, tu peux ajouter ça dans les migrations, ça se fait très bien

    un rake db:migrate exécute les migrations entre le chiffre contenu dans schema_info (si il y en a un) et la migration max disponible.

    Si tu veux spécifier un numéro de version, tu peux faire un rake db:migrate version=XXX
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Voici le fichier migration 005
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class CreateLineItems < ActiveRecord::Migration
      def self.up
        create_table :line_items do |t|
          t.string :ref_offre, :null => false
          t.string :ref_produit, :null => false
          t.string :quantite, :null => false
          t.string :prix, :decimal, :precision=>8, :scale=>2, :null => false
          t.timestamps
        end
     
        execute "alter table line_items add constraint fk_line_item_products 
                  foreign key (ref_produit) references produits(id)"
     
        execute "alter table line_items add constraint fk_line_item_offres
                  foreign key (ref_offre) references offres(id)"
      end
     
      def self.down
        drop_table :line_items
      end
    end
    Si je me souviens bien, j'avais fait une erreur de syntaxe dans le premier execute (ref au lieu de id) => erreur, mais la table a bizarrement quand même été créée

    Et maintenant plus moyen de passer cette étape même avec un rake db:migrate version=006

    Quid si je revenais en arriere jusqu'a l'étape 4 ?
    Serait il possible que le numéro de version soit encoder dans la base avant meme de 'savoir' si l'opération s'est bien déroulée ??
    24 hours a day ... never enough

  6. #6
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Re,

    Le problème était en fait situé au niveau des execute.
    J'ai donc préféré supprimer uniquement la table line_items via phpMyAdmin et ai supprimé les execute erronés dans le fichier migration 005 (je m'en occuperai plus tard)
    Un petit rake db:migrate plus tard et tout est redevenu dans l'ordre :d

    Merci bcp Titoumimi
    24 hours a day ... never enough

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Mon script php et sql genere une erreur pourquoi ?
    Par booster71 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/07/2014, 08h05
  2. Réponses: 3
    Dernier message: 11/05/2014, 22h24
  3. db:migrate génère une erreur
    Par kaskarot dans le forum Ruby on Rails
    Réponses: 22
    Dernier message: 11/06/2010, 17h01
  4. [MySQL] WHILE genere une erreur
    Par Budy123 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/02/2010, 15h20
  5. Pourquoi mon web.config me génère une erreur ?
    Par nazimb dans le forum ASP.NET
    Réponses: 6
    Dernier message: 18/05/2006, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo