Tag: 数据库移植

在具有多个容器实例的Docker容器中使用Rails运行迁移

我见过很多为Rails应用程序制作Docker容器的例子。 通常他们运行一个rails服务器,并且有一个运行迁移/设置的CMD,然后调出Rails服务器。 如果我同时生成这些容器中的5个,那么Rails如何处理试图启动迁移的多个进程? 我可以看到Rails在一般查询日志(这是一个MySQL数据库)中检查当前模式版本: SELECT `schema_migrations`.`version` FROM `schema_migrations` 但是如果在不同的Rails实例中同时发生这种情况,我可以在这里看到一个竞争条件。 考虑到DDL在MySQL中不是事务性的,而且在运行迁移时(除了迁移事务之外),在通用查询日志中没有看到发生任何locking,所以似乎将它们并行启动将是一个坏主意。 事实上,如果我在本地启动了三次,我可以看到两个rails实例在创build表时崩溃,因为它已经存在,而第三个rails实例愉快地完成迁移。 如果这是一个将某些东西插入到数据库中的迁移,那将是非常不安全的。 那么运行一个运行迁移/设置的容器然后生成一个独angular兽实例(这反过来又会产生多个轨道工作者)是更好的主意吗? 我应该产卵N铁轨容器和一个运行迁移的“迁移容器”然后退出? 有更好的select吗?