具有多个虚拟机的自动 Ecto 迁移?
Automatic Ecto migrations with multiple VMs?
我在需要访问同一个 Postgres 数据库的不同 Erlang VM 实例中有 N 个工作进程(不是 Erlang PID),其中 N >= 2。当这些工作进程升级时,我希望能够 运行 Ecto 会自动迁移,因此当我对这些 worker 进行升级时,如果可能的话,我不必经历 "stop all workers, run migration, start all workers again" 的过程。然而,仔细想想,我能想到的唯一解决办法是:
- 有另一个工人专门只做迁移。这是我最终可能会使用的路径。
- 使用 [在此处插入 NoSQL 数据库] 而不是 Postgres。我不想这样做。
- 想出一个策略,在工作节点中选出一个领导者,然后领导者可以 运行 迁移。这感觉像是错误的做法。
- 祈祷 运行并行执行 N 次迁移不会弄乱数据库。这很愚蠢,我不会这样做。
但是所有这些解决方案都感觉像是解决问题的技巧。要么我在这里失踪,要么我只是以错误的方式考虑迁移,我不确定其中哪一个是正确的。
Have another worker specifically to only do migrations. This is the path I'm likely going to end up using.
这似乎是目前最好的方法。虽然注意Ecto 3.0,目前在master开发中,运行迁移时会使用锁,所以这个问题会为你解决。
我在需要访问同一个 Postgres 数据库的不同 Erlang VM 实例中有 N 个工作进程(不是 Erlang PID),其中 N >= 2。当这些工作进程升级时,我希望能够 运行 Ecto 会自动迁移,因此当我对这些 worker 进行升级时,如果可能的话,我不必经历 "stop all workers, run migration, start all workers again" 的过程。然而,仔细想想,我能想到的唯一解决办法是:
- 有另一个工人专门只做迁移。这是我最终可能会使用的路径。
- 使用 [在此处插入 NoSQL 数据库] 而不是 Postgres。我不想这样做。
- 想出一个策略,在工作节点中选出一个领导者,然后领导者可以 运行 迁移。这感觉像是错误的做法。
- 祈祷 运行并行执行 N 次迁移不会弄乱数据库。这很愚蠢,我不会这样做。
但是所有这些解决方案都感觉像是解决问题的技巧。要么我在这里失踪,要么我只是以错误的方式考虑迁移,我不确定其中哪一个是正确的。
Have another worker specifically to only do migrations. This is the path I'm likely going to end up using.
这似乎是目前最好的方法。虽然注意Ecto 3.0,目前在master开发中,运行迁移时会使用锁,所以这个问题会为你解决。