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'