如何运行依赖项的ecto迁移?

时间:2017-04-21 13:55:07

标签: elixir ecto

我正在构建一个项目,它将作为多个其他项目的核心,有点像红宝石世界中的Rails引擎。

我在我的核心项目中实现了一些基础数据库结构,基本上是全面共享的结构。

我的问题是我使用我的核心的项目没有注册核心项目的迁移。

有什么方法可以运行我的核心依赖项的迁移?

如果您需要更多信息,请与我们联系。 :-)

谢谢

2 个答案:

答案 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应用程序进行迁移,并使用您应用的配置和存储库。)