Это недопустимый синтаксис слайса ... никогда не должен быть внутри [], если вы не используете объект слайса.
пример:
sliceObj = slice(1, 3)
К сожалению, необходимо вручную очистить отказавшие миграции для MySQL. MySQL не поддерживает транзакционные изменения определения базы данных.
Направляющие 2.2 включают транзакционные миграции для PostgreSQL. Направляющие 2.3 включают транзакционные миграции для SQLite.
Это действительно не помогает Вам для Вашей проблемы прямо сейчас, но если у Вас есть выбор базы данных по будущим проектам, я рекомендую использовать один с поддержкой транзакционного DDL, потому что это делает миграции намного более приятными.
Обновление - это все еще верно в 2017, на направляющих 4.2.7 и MySQL 5.7, о котором сообщает Alejandro Babio в другом ответе здесь.
Для движения в указанную версию, просто используйте:
rake db:migrate VERSION=(the version you want to go to)
Но если миграция приводит часть к сбою путь, необходимо будет очистить его сначала. Один путь был бы:
down
метод миграции, чтобы просто отменить часть up
это работалоdown
)Простой способ сделать это должно перенести все Ваши действия в транзакции:
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, то вышеупомянутое будет работать просто великолепно. Любые ошибки или в или во вниз отступят.
ЗНАЙТЕ, что некоторые типы действий не могут вернуться через транзакции. Обычно изменения таблицы (отбрасывающий таблицу, удаляя или добавляя столбцы, и т.д.) не могут откатываться.
Выполните миграцию вниз с консоли:
http://gilesbowkett.blogspot.com/2007/07/how-to-use-migrations-from-console.html (щелкните до его пасты)
.У меня была опечатка (в "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
как вы можете видеть, я просто вручную добавил строку коррекции, а затем удалил ее снова, прежде чем проверил ее.