ruby on rails - Ejecutar migraciones desde la consola de rieles.
ruby-on-rails ruby-on-rails-3.1 (7)
Creé un método en mi archivo .irbrc que ejecuta migraciones y luego vuelve a cargar la consola:
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
Vea el archivo completo aquí: https://gist.github.com/imme5150/6548368
¿Hay alguna manera de ejecutar comandos rake para db: migrate y db: rollback en la consola?
¡Apesta esperar a que se cargue el entorno de los rieles!
En la consola:
ActiveRecord::Migration.remove_column :table_name, :column_name
Esto le permitirá migrar sin volver a cargar todo el entorno de los rieles:
ActiveRecord::Migrator.migrate "db/migrate"
y revertir:
# 3 is the number of migration to rollback, optional, defaults to 1
ActiveRecord::Migrator.rollback "db/migrate", 3
Necesitaba fingir que se ejecutó una migración para desbloquear un despliegue, esto se puede hacer con:
class Mig < ActiveRecord::Base; self.table_name = ''schema_migrations'';end
Mig.create! version: ''20180611172637''
Otra forma en que me parece más ordenado para ejecutar un comando de migración desde la consola es la siguiente:
ActiveRecord::Schema.define do
create_table :foo do |t|
t.string :bar
t.timestamps
end
end
Esto tiene la ventaja de que el contenido dentro del bloque es compatible con solo copiar y pegar contenido aleatorio de un archivo de migración real / schema.rb
.
Para los rieles 5.2, la respuesta aceptada ha sido eliminada y reemplazada por
ActiveRecord::MigrationContext.new("db/migrate").migrate
Tenga en cuenta que esto también puede cambiar para futuras versiones de rieles, ya que funcionan para agregar múltiples conexiones de base de datos
Puedes usar el comando% x
%x[rake db:migrate]