我如何 运行 ecto 依赖项的迁移?
How can i run ecto migrations of a dependency?
我正在构建一个项目,它将作为多个其他项目的核心,有点像 ruby 世界中的 Rails 引擎。
我在我的核心项目中实现了一些基础数据库结构,基本上是全盘共享的结构。
我的问题是使用我的核心的项目没有注册核心项目的迁移。
有什么方法可以 运行 迁移我的核心依赖项?
如果您需要更多信息,请告诉我。 :-)
谢谢
您应该能够在自定义任务中使用 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
您还可以通过定义 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
应用程序进行迁移,并使用您应用程序的配置和存储库)。
我正在构建一个项目,它将作为多个其他项目的核心,有点像 ruby 世界中的 Rails 引擎。
我在我的核心项目中实现了一些基础数据库结构,基本上是全盘共享的结构。
我的问题是使用我的核心的项目没有注册核心项目的迁移。
有什么方法可以 运行 迁移我的核心依赖项?
如果您需要更多信息,请告诉我。 :-)
谢谢
您应该能够在自定义任务中使用 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
您还可以通过定义 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
应用程序进行迁移,并使用您应用程序的配置和存储库)。