2016-12-21 4 views
1

J'utilise l'addon Heroku Postgres pour ma base de données (version de base). Ruby Sequel est mon ORM pour la gestion de schéma.Les migrations Ruby Sequel en cours d'exécution, mais ne parviennent pas à ajouter des colonnes

Récemment, certaines migrations n'ont pas mis à jour le schéma de base de données.

Je cours la migration 19, 019_add_last_unique_story_to_user.rb:

Sequel.migration do 
    up do 
    alter_table(:state_tables) do 
     add_column :last_unique_story, Integer, default: 0 
     add_column :last_unique_story_read?, TrueClass, default: true 
    end 
    end 
    down do 
    alter_table(:state_tables) do 
     drop_column :last_unique_story 
     drop_column :last_unique_story_read? 
    end 
    end 
end 

Cela met à jour la base de données [: schema_info] de la version 18 à 19, mais aucune colonne sont ajoutés à la: table state_table. Ce problème existe à la fois pour la production et les bases de données locales. J'ai essayé de migrer plusieurs fois et vérifié que l'URL db était correcte.

Mon solution rapide: Je copie et collé le code ci-dessus dans une migration , 020_test.rb et couru ma tâche de migration de coupe rake db:migrate:up. Cela a mis à jour avec succès la base de données.

Est-ce que quelqu'un sait ce qui pourrait se passer ici? Pourquoi certaines migrations s'exécutent-elles correctement, mettez-vous à jour la version de migration sans mettre à jour les colonnes? Serait-ce un problème de nom, un problème de mise en cache ou un problème Heroku? Merci pour ton aide!

Répondre

1

Cela dépend de la façon dont votre tâche rake est écrite. Sequel ne contient pas de tâches de rake, vous devrez donc vérifier d'où vous avez obtenu la tâche de rake.

En général, la seule raison pour laquelle la migration n'ajouterait pas la colonne est si la migration n'a pas été exécutée. Par exemple, si la version de schéma dans la base de données était déjà 19, elle ne serait pas exécutée lors de la migration. Cela expliquerait pourquoi la migration a été exécutée lorsque vous l'avez copiée dans la migration 20 puis migrée. Si vous exécutez le programme de migration avec un enregistreur de base de données, Sequel enregistre l'activité de migration (en plus de SQL).