Откат неудавшейся миграции направляющих

Это недопустимый синтаксис слайса ... никогда не должен быть внутри [], если вы не используете объект слайса.

пример:

sliceObj = slice(1, 3)
80
задан CDspace 2 November 2016 в 15:06
поделиться

5 ответов

К сожалению, необходимо вручную очистить отказавшие миграции для MySQL. MySQL не поддерживает транзакционные изменения определения базы данных.

Направляющие 2.2 включают транзакционные миграции для PostgreSQL. Направляющие 2.3 включают транзакционные миграции для SQLite.

Это действительно не помогает Вам для Вашей проблемы прямо сейчас, но если у Вас есть выбор базы данных по будущим проектам, я рекомендую использовать один с поддержкой транзакционного DDL, потому что это делает миграции намного более приятными.

Обновление - это все еще верно в 2017, на направляющих 4.2.7 и MySQL 5.7, о котором сообщает Alejandro Babio в другом ответе здесь.

77
ответ дан Bryan Ash 24 November 2019 в 09:55
поделиться

Для движения в указанную версию, просто используйте:

rake db:migrate VERSION=(the version you want to go to)

Но если миграция приводит часть к сбою путь, необходимо будет очистить его сначала. Один путь был бы:

  • отредактируйте down метод миграции, чтобы просто отменить часть up это работало
  • мигрируйте назад на предшествующее состояние (где Вы запустили),
  • зафиксируйте миграцию (включая отмену Ваших изменений в down)
  • попробовать еще раз
20
ответ дан MarkusQ 24 November 2019 в 09:55
поделиться

Простой способ сделать это должно перенести все Ваши действия в транзакции:

class WhateverMigration < ActiveRecord::Migration

 def self.up
    ActiveRecord::Base.transaction do
...
    end
  end

  def self.down
    ActiveRecord::Base.transaction do
...
    end
  end

end

Как Luke Francl отметил, "MySql [таблицы MyISAM не делают] транзакции поддержки" - который является, почему Вы могли бы рассмотреть MySQL предотвращения в целом или по крайней мере MyISAM в частности.

Если Вы будете использовать InnoDB MySQL, то вышеупомянутое будет работать просто великолепно. Любые ошибки или в или во вниз отступят.

ЗНАЙТЕ, что некоторые типы действий не могут вернуться через транзакции. Обычно изменения таблицы (отбрасывающий таблицу, удаляя или добавляя столбцы, и т.д.) не могут откатываться.

8
ответ дан BryanH 24 November 2019 в 09:55
поделиться

Выполните миграцию вниз с консоли:

http://gilesbowkett.blogspot.com/2007/07/how-to-use-migrations-from-console.html (щелкните до его пасты)

.
1
ответ дан 24 November 2019 в 09:55
поделиться

У меня была опечатка (в "add_column"):

def self.up

 add_column: medias,: title,: text 
add_colunm: medias,: enctype,: text {{1} } 

end

def self.down

 remove_column: medias,: title 
remove_column: medias,: enctype 
 

end

, а затем ваша проблема (невозможно отменить частично неудачную миграцию). после неудачного поиска в Google я запустил это:

def self.up

 remove_column: medias,: title 
add_column: medias,: title,: text 
add_column: medias,: enctype, : text 
 

end

def self.down

 remove_column: medias,: title 
remove_column: medias,: enctype 
 

end

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

1
ответ дан 24 November 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: