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/migrations
和 priv/search_repo/migrations
。
如果我运行 $ mix ecto.migrate new_migration
,这将在两个目录中为new_migration
创建一个迁移文件。
如果我 运行 $ mix ecto.rollback
,这 仅 回滚来自 priv/repo/migrations
.
的迁移
如果我运行$ 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
我已经设置了我的 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
,后来我添加了 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
,这运行是从两个目录的迁移。
所以我想知道的是,我怎样才能规范这种行为?我 运行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