我正在处理一些假设下面的rollback
函数会回滚所有迁移的代码。但是,它似乎只是回滚了最新的迁移。
(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
以回滚所有迁移?
答案 0 :(得分:1)
Ragtime rollback
function接受多个选项。其中有许多要回滚的迁移迁移或要回滚到的迁移ID(amount-or-id
)。
当ragtime.jdbc/load-resources
返回按名称排序的所有迁移的seq(按照惯例,它们将按其应用顺序排序),您可以查询第一个并获取其ID:
(-> (ragtime.jdbc/load-resources "migrations")
(first)
(:id))
如果您的数据库是最新的迁移,我想使用迁移的count
seq 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)))