[英]Phoenix - issues managing migration mix tasks for multiple databases
我已经设置了Phoenix应用程序,以便它可以连接到两个数据库。 我在管理迁移和各种Ecto 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
,即默认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
。
如果我运行$ mix ecto.migrate
,则这将运行两个目录的迁移。
所以我想知道的是,如何规范这种行为? 我正在运行的命令是否有问题,或者应用程序的配置中是否需要更改以指向这些不同的目录?
我希望能够创建迁移并将它们指向特定目录,并且希望能够指定迁移和回滚指向的数据库。 如何自定义此行为?
您正在寻找的选项是-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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.