J'ai une migration Rails qui n'est pas appliquée à mon schema.rb. La migration devrait créer un tableau:
class CreateUserGraphs < ActiveRecord::Migration
def change
create_table :user_graphs do |t|
t.string :name
t.string :content
t.integer :user_id
t.string :type_id
t.integer :upload_id
t.timestamps
end
add_index :user_graphs, [:user_id, :created_at]
end
end
J'ai fait db: reset. Ensuite, j'ai essayé rake db: migrate: up VERSION = 123123123 (c'est le numéro de migration). Je suis dans mon environnement "dev".
Pourquoi la migration n'affecte-t-elle pas schema.rb?
De la documentation :
La tâche rake db:reset
va supprimer la base de données, la recréer et y charger le schéma actuel.
Ce n'est pas la même chose que d'exécuter toutes les migrations. Il utilisera uniquement le contenu du fichier schema.rb actuel. Si une migration ne peut pas être annulée, 'rake db: reset' peut ne pas vous aider. Pour en savoir plus sur le vidage du schéma, voir 'Schéma dumping et vous.'
Donc rake db:reset
=> db:drop db:create db:schema:load db:seed
Pour exécuter toutes les migrations, utilisez: rake db:drop db:create db:migrate
Or db:migrate:reset
=> rake db:drop db:create db:migrate
J'ai eu le même problème ... il s'est avéré que c'est parce que j'ai modifié le nom de mon fichier de migration pour qu'il soit plus net. Assurez-vous de ne pas supprimer l'horodatage dans le titre du fichier de migration comme je l'ai fait.
J'ai supprimé le fichier de migration, le modèle, le contrôleur et les tests associés, puis j'ai régénéré le contrôleur et le modèle qui ont résolu le problème.
J'ai eu le même problème. Je travaille dans un environnement de développement (avec Passenger et Apache). Les environnements de production et de développement utilisent la même base de données.
Lorsque j'ai exécuté rake db:migrate
, la base de données a été modifiée, mais le schéma n'a pas été mis à jour. Ensuite, je lance rake db:migrate Rails_ENV=development
, et maintenant le schéma a été mis à jour.
On dirait que Rails/rake sont confus à propos de mon environnement. Passager définit un environnement de développement pour ce site, mais rake about
dit "Production de l'environnement".
Les «versions» des migrations se font via des horodatages. Rails vérifie les migrations à exécuter en comparant l'horodatage de la dernière migration et en recherchant d'éventuelles nouvelles.
Si la version de votre nouvelle migration est 123123123
, elle ne sera pas exécutée car ce nombre n'est pas supérieur à l'horodatage actuel (par exemple, 20131209170300
).
D'abord, vous essayez de réduire votre migration
rake db: migrate: down VERSION = 20180605141404 # "VERSION = 20180605141404 votre version de migration"
Et encore votre migration
rake db: migrate: up VERSION = 20180605141404 # "VERSION = 20180605141404 votre version de migration"
Trouver un moyen d'obtenir une description de l'erreur . Couru rake db: migrate: reset
`SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "rooms" ADD "priority" integer NOT NULL/usr/local/rvm/gems/Ruby-2.2.1/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `initialize`'