Phoenix - 管理多个数据库的迁移组合任务

时间:2017-04-21 16:54:48

标签: elixir phoenix-framework mix

我已经设置了我的Phoenix应用程序,以便它连接到两个数据库。我在管理迁移和各种Ecto print(paintColors[input('Choose a color to paint the wall: ')]) 任务时遇到了一些麻烦 - 特别是创建新的迁移和回滚迁移。

首先,这是来自mix

的回购配置
config/dev.exs

最初,我的应用只有一个回购,默认为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. - privpriv/repo/migrations中有两个迁移目录。

  1. 如果我运行priv/search_repo/migrations,则会在两个目录中为$ mix ecto.migrate new_migration创建迁移文件。

  2. 如果我运行new_migration,则会从$ mix ecto.rollback回滚迁移。

  3. 如果我运行priv/repo/migrations,则会从两个目录运行迁移。

  4. 所以我想知道的是,我该如何标准化这种行为?我正在运行的命令出现问题,或者我需要更改应用程序配置中的某些内容以指向这些不同的目录?

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

1 个答案:

答案 0 :(得分:2)

您要查找的选项是-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