class UpdateIndexOnUsers < ActiveRecord::Migration
def change
sql = 'DROP INDEX index_users_on_email'
sql << ' ON users' if Rails.env == 'production' # Heroku pg
ActiveRecord::Base.connection.execute(sql)
end
end
Мне нужно отменить эту миграцию. Когда я верну его с помощью rake db:migrate VERSION=20150611173430
, я получаю эту ошибку.Реверсирование определенной миграции Rails, невозможно удалить
StandardError: An error has occurred, this and all later migrations canceled:
PG::SyntaxError: ERROR: syntax error at end of input
LINE 1: CREATE INDEX index_users_on_email
^
: CREATE INDEX index_users_on_email/Users/goda/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
Затем я добавляю новый файл миграции, чтобы попытаться его отменить.
class FixUpdateIndexOnUsers < ActiveRecord::Migration
def change
sql = 'CREATE INDEX index_users_on_email'
sql << ' ON users' if Rails.env == 'production' # Heroku pg
ActiveRecord::Base.connection.execute(sql)
end
end
BUT on heroku, heroku run rake db:migrate
не работает. Потому что он сталкивается с этой синтаксической ошибкой при первой миграции, которую я не могу удалить. То, что должно быть сделано?
EDIT: Исправлен синтаксис, по-прежнему выдающий ошибку.
PG::SyntaxError: ERROR: syntax error at or near "ON"
LINE 1: DROP INDEX index_users_on_email ON users;
Могу ли я просто изменить файл миграции, у меня уже есть db: migrated? – goda
Да, конечно. Это был бы лучший способ - удалить вторую миграцию и исправить методы в первую очередь. –
Спасибо, я думал, что миграция должна быть решена должным образом в одном из генераторов рельсов. Я просто удалил def change, и он работал во время db: rollback и db: migration. – goda