Phoenix - 管理多个数据库的迁移混合任务的问题

Phoenix - issues managing migration mix tasks for multiple databases

我已经设置了我的 Phoenix 应用程序,以便它连接到两个数据库。我在管理我的迁移和各种 Ecto mix 任务时遇到了一些麻烦 - 特别是创建新迁移和回滚迁移。

首先,这是来自 config/dev.exs

的 repo 配置
config :phoenix_backend, PhoenixBackend.Repo,
    adapter: Ecto.Adapters.Postgres,
    username: "postgres",
    password: "postgres",
    database: "phoenix_backend_dev",
    hostname: "localhost",
    pool_size: 10

config :phoenix_backend, PhoenixBackend.SearchRepo,
   adapter: Ecto.Adapters.Postgres,
   username: "postgres",
   password: "postgres",
   database: "phoenix_backend_search_dev",
   hostname: "localhost",
   pool_size: 10

最初,我的应用程序只有一个存储库,默认 Repo,后来我添加了 SearchRepo

当我第一次设置 SearchRepo 时,我 运行 $ mix gen.model 在该数据库中创建一个新模型。迁移进入 priv/repo/migrations,然后我调整了自动生成的模块定义以指向我的新数据库 - 我更改了

defmodule PhoenixBackend.Repo.Migrations.CreateUserRole do

defmodule PhoenixBackend.SearchRepo.Migrations.CreateSearch do

当我运行$ mix ecto.migrate时,我得到了错误

Could not find migrations directory "priv/search_repo/migrations" for repo PhoenixBackend.SearchRepo.

所以我创建了那个目录,将迁移移入其中,然后 运行 再次迁移 - 完美!

所以这让我想到了问题...

我现在在 priv 中有两个迁移目录 - priv/repo/migrationspriv/search_repo/migrations

  1. 如果我运行 $ mix ecto.migrate new_migration,这将在两个目录中为new_migration创建一个迁移文件。

  2. 如果我 运行 $ mix ecto.rollback,这 回滚来自 priv/repo/migrations.

    的迁移
  3. 如果我运行$ mix ecto.migrate,这运行是从两个目录的迁移。

所以我想知道的是,我怎样才能规范这种行为?我 运行ning 的命令有问题,还是我需要更改应用程序的配置以指向这些不同的目录?

我希望能够创建迁移并将它们指向特定目录,并且我希望能够指定迁移和回滚指向的数据库。我如何自定义此行为?

您要查找的选项是-r CustomRepo

$ mix ecto.gen.migration add_something -r MyApp.SearchRepo
$ mix ecto.migrate -r MyApp.SearchRepo

这一切都在混合帮助中。得到那个

$ mix help ecto.gen.migration
$ mix help ecto.migrate