2013-09-30 3 views
19

В моем приложении Rails 4 я хотел бы свернуть файлы миграции в один большой файл (аналогично schema.rb), так как пришло время провести некоторое обслуживание, но я не уверен, как получить доступ к таблице в база данных, в которой хранятся данные миграции, поэтому при выполнении миграции я не получаю никаких ошибок/конфликтов.Таблица миграции схем

Вопрос Как я могу получить доступ и удалить данные в таблице, в которой хранятся данные миграции?

+0

Вы пробовали копировать/вставить 'schema.rb' файл в миграционную файл? –

+0

У меня нет проблем с созданием единственного файла миграции, но если я просто изменю файлы миграции, не учитывая db, я получу ошибки во время миграции. – tommyd456

+0

Мое настоящее понимание заключается в том, что вы хотите иметь файл, в котором хранятся все ваши миграции, чтобы вы могли очистить их? Если это так, я предлагаю пройти через них и записать данные в новый файл. Использование таких методов, как 'Файл'' .glob' и т. Д. –

ответ

7

В таблице schema_migrations содержатся номера ревизий; причем последняя запись является последней выполненной миграцией. Вы можете просто манипулировать этими записями вручную.

+2

Спасибо - мой вопрос: как я могу получить доступ к этой таблице - я использовать консоль? Я хочу удалить все записи, а затем создать новую миграцию - это нормально? – tommyd456

+0

Если это не нужно повторять (т. Е. Пока ничего не происходит), я просто использую вашу оболочку db (psql или mysql и т. Д.) И запускаю SQL-запрос. – steakchaser

+0

это psql, но никогда не использовал оболочку до – tommyd456

38

для удовольствия, вы можете также управлять их в консоли, сделав класс модели для них ...

class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; end 

, то вы можете сделать SchemaMigration.all, SchemaMigration.last.delete и т.д.

Действительно просто замените использование SQL, и это очень редко, что вам нужно будет возиться на этом низком уровне ... как правило, плохая идея, но здорово видеть, как это сделать :)

+1

Это работает - просто запустите этот код в консоли Rails, чтобы создать модель в этом экземпляре консоли. Затем вы можете выбирать строки из этой таблицы с помощью .where (: version => ...) и удалять ссылки на миграцию по мере необходимости. Очень полезно, поскольку PGAdmin не позволит вам удалять строки из таблиц, у которых нет первичного ключа, указанного в gui. – JosephK

8

Другим решением может быть доступ к нему через:

ActiveRecord::SchemaMigration 

Ответ, данный Дэвидом, не работает в моем контексте.

2

Не знаю, почему вы хотите это сделать, но здесь вы идете:

ActiveRecord :: Migrator.get_all_versions

Смежные вопросы