2016-02-23 5 views
0

Я имею дело с некоторым кодом, который предположил, что функция rollback будет откатывать все миграции. Однако, похоже, только откат последней миграции.Откат всех миграций с ragtime

(defn create-migrator 
    [spec] 
    {:datastore (ragtime.jdbc/sql-database spec) 
    :migrations (ragtime.jdbc/load-resources "migrations")}) 

(defn rollback 
    [env] 
    (-> (create-db-spec env) 
     (create-migrator) 
     (ragtime.repl/rollback))) 

Как я могу изменить rollback откатить все миграции?

ответ

1

Ragtime rollback function принимает несколько вариантов. Среди них есть количество миграций для отката или идентификатор миграции, к которому вы хотите откат (amount-or-id).

Как ragtime.jdbc/load-resources возвращает SEQ всех миграций, отсортированных по именам (и по соглашению они будут отсортированы по порядку их применения), вы можете запросить первый и получить его ID:

(-> (ragtime.jdbc/load-resources "migrations") 
    (first) 
    (:id)) 

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


Для данного примера:

(defn rollback-all 
    [env] 
    (let [spec (create-db-spec env) 
     migrator (create-migrator spec) 
     count-migrations (-> migrator :migrations count)] 
    (ragtime.repl/rollback migrator count-migrations))) 
+0

Так ... используя эту информацию, как я динамически откатить все миграции? Есть ли способ запросить, сколько миграций существует? Или есть ли «идентификатор миграции», который представляет начало времени? –

+0

Усовершенствованный ответ с соответствующей информацией о идентификаторе миграции. –

+0

Спасибо! Это сделал трюк. –

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

  • Нет связанных вопросов^_^