Rails 数据库迁移使用事务

10
我正在学习Rails,并开始学习数据库迁移。我创建了两个迁移,都成功地迁移了上去。但是,当我尝试迁移回去时,最新的迁移(第一个运行的)由于我的代码中有一个拼写错误而失败了。我修复了这个错误,但迁移在此之后仍然无法成功。我发现原因是迁移向下进行到一半时中止了,然后当我再次尝试迁移回去时,它失败了,因为一些更改已经完成,所以列名不同等其他问题。最终,我通过调整“schema_migrations”表并手动将其回滚到先前版本,然后从那里进行上下迁移来解决了这个问题。
我的问题是,是否有一种方法告诉Rails以事务模式运行迁移,如果代码失败,则不要提交事务?
1个回答

13

如果您的数据库支持,Rails将在事务中运行您的迁移:(点击此处了解更多)

对于支持带有更改模式语句的事务的数据库,迁移将被包装在一个事务中。如果数据库不支持,则当迁移失败时,成功部分将不会回滚。您需要手动回滚所做出的更改。

在执行模式更改时,使用支持事务的数据库是非常重要的。MySQL(据我所知)不支持,但Postgres绝对支持。


好的,知道了。谢谢。 - richbai90
1
我正在使用Mariadb,它支持事务。在这种情况下它为什么不能工作?我正在使用mysql2连接器。 - richbai90
3
这取决于您在迁移中要执行的操作。例如,“alter table”语句在执行语句之前会进行隐式提交。请参见https://dev59.com/w2Eh5IYBdhLWcg3wHAJD。 - tsauerwein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接