我已经设置了我的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.
- priv
和priv/repo/migrations
中有两个迁移目录。
如果我运行priv/search_repo/migrations
,则会在两个目录中为$ mix ecto.migrate new_migration
创建迁移文件。
如果我运行new_migration
,则仅会从$ mix ecto.rollback
回滚迁移。
如果我运行priv/repo/migrations
,则会从两个目录运行迁移。
所以我想知道的是,我该如何标准化这种行为?我正在运行的命令出现问题,或者我需要更改应用程序配置中的某些内容以指向这些不同的目录?
我希望能够创建迁移并将它们指向特定目录,并且我希望能够指定迁移和回滚指向哪些数据库。如何自定义此行为?
答案 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