我正在构建一个项目,它将作为多个其他项目的核心,有点像红宝石世界中的Rails引擎。
我在我的核心项目中实现了一些基础数据库结构,基本上是全面共享的结构。
我的问题是我使用我的核心的项目没有注册核心项目的迁移。
有什么方法可以运行我的核心依赖项的迁移?
如果您需要更多信息,请与我们联系。 :-)
谢谢
答案 0 :(得分:2)
您应该能够在自定义任务中使用Ecto.Migrator
模块。
有关更详细的说明,请参阅running-migration-in-an-exrm-release。
defmodule Release.Tasks do
def migrate do
{:ok, _} = Application.ensure_all_started(:my_dependency)
path = Application.app_dir(:my_dependency, "priv/repo/migrations")
Ecto.Migrator.run(MyApp.Repo, path, :up, all: true)
:init.stop()
end
end
答案 1 :(得分:0)
您还可以通过定义Mix.Tasks.*
模块来创建混合任务来帮助您:
defmodule Mix.Tasks.DependencyApp.Ecto.Migrate do
use Mix.Task
alias MyApp.Repo
def run(args) do
path = Application.app_dir(:dependency_app, "priv/repo/migrations")
{:ok, pid, apps} = Mix.Ecto.ensure_started(Repo, [])
Ecto.Migrator.run(Repo, path, :up, all: true)
Repo.stop(pid)
end
end
这将允许您运行mix dependency_app.ecto.migrate
(从dependency_app
应用程序进行迁移,并使用您应用的配置和存储库。)