Запустите миграцию из консоли rails - PullRequest
54 голосов
/ 02 сентября 2011

Есть ли способ запустить команды rake для db: migrate и db: rollback на консоли?

Отстойно ждать загрузки рельсов!

Ответы [ 7 ]

76 голосов
/ 10 мая 2014

В консоли:

ActiveRecord::Migration.remove_column :table_name, :column_name

Чтобы обновить файл schema.rb после запуска миграции с консоли, необходимо запустить rails db:migrate

67 голосов
/ 02 сентября 2011

Это позволит вам мигрировать без перезагрузки всей среды рельсов:

ActiveRecord::Migrator.migrate "db/migrate"

и откат:

# 3 is the number of migration to rollback, optional, defaults to 1
ActiveRecord::Migrator.rollback "db/migrate", 3
22 голосов
/ 18 марта 2015

Другой способ, которым я нахожу более подходящим, чтобы просто запустить некоторую команду миграции из консоли, это:

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

Преимущество заключается в том, что содержимое внутри блока совместимо с простым копированием и вставкой случайного содержимого из реального файла миграции / schema.rb.

4 голосов
/ 10 октября 2018

Для рельсов 5.2 принятый ответ был удален и заменен на

ActiveRecord::MigrationContext.new("db/migrate").migrate

Обратите внимание, что это может измениться и для будущих версий рельсов, так как они работают для добавления нескольких соединений с базой данных

2 голосов
/ 19 июня 2018

Мне нужно было сделать вид, что миграция была запущена, чтобы разблокировать развертывание, это можно сделать с помощью:

class Mig < ActiveRecord::Base; self.table_name = 'schema_migrations';end
Mig.create! version: '20180611172637'
0 голосов
/ 13 сентября 2013

Я создал метод в своем файле .irbrc, который выполняет миграцию, а затем перезагружает консоль:

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

См. Весь файл здесь: https://gist.github.com/imme5150/6548368

0 голосов
/ 02 сентября 2011

Вы можете использовать% x [команду]

%x[rake db:migrate]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...