Exécuter des migrations à partir de la console des rails

Existe-t-il un moyen d’exécuter des commandes rake pour db: migrate et db: rollback sur la console?

Il est nul d’attendre que l’environnement des rails se charge!

Cela vous permettra de migrer sans recharger tout l’environnement de rails:

ActiveRecord::Migrator.migrate "db/migrate" 

et rollback:

 # 3 is the number of migration to rollback, optional, defaults to 1 ActiveRecord::Migrator.rollback "db/migrate", 3 

Dans la console:

 ActiveRecord::Migration.remove_column :table_name, :column_name 

Voici un autre moyen que je trouve plus simple de lancer une commande de migration depuis la console:

 ActiveRecord::Schema.define do create_table :foo do |t| t.ssortingng :bar t.timestamps end end 

Cela présente l’avantage que le contenu du bloc est compatible avec la copie et le collage de contenus aléatoires à partir d’un fichier de migration réel / schema.rb .

Vous pouvez utiliser le% x [commande]

 %x[rake db:migrate] 

J’ai créé une méthode dans mon fichier .irbrc qui exécute les migrations puis recharge la console:

 def migrate if defined? Rails::Console # turn off info logging for Rails 3 old_log_level = ActiveRecord::Base.logger.try(:sev_threshold) ActiveRecord::Base.logger.sev_threshold = Logger::WARN end reload! && migations_ran = true if ActiveRecord::Migrator.migrate(Rails.root.join("db/migrate")).any? ActiveRecord::Base.logger.sev_threshold = old_log_level if defined? old_log_level migations_ran ||= nil # useful exit status end 

Voir le fichier entier ici: https://gist.github.com/imme5150/6548368

Je devais faire semblant qu’une migration était exécutée pour débloquer un déploiement, cela peut être fait avec:

 class Mig < ActiveRecord::Base; self.table_name = 'schema_migrations';end Mig.create! version: '20180611172637'