Когда вы запускаете смешанные задачи, они запускаются в своих собственных процессах, поэтому другие приложения (включая основное приложение, содержащее задачу) могут не запускаться.
Иногда вам приходится вставлять подобные строки в свой пользовательский. Смешайте задачи, и я подозреваю, что вы могли бы поместить их в свои миграции:
{:ok, _} = Application.ensure_all_started(:my_app)
{:ok, _} = Application.ensure_all_started(:another_app)
Однако иногда недостаточно убедиться, что они запущены: иногда вам нужно явно запустить процесс. В вашем случае вам придется запустить другое приложение Ecto.Repo
. Обычно вы запускаете свои репозитории Ecto , перечисляя их в супервизоре вашего приложения внутри application.ex
, например
def start(_type, _args) do
children = [
{MyApp.Repo, []},
{AnotherApp.Repo, []},
]
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
end
Но если это другое приложение не нужно запускать для вашего приложения обычные функции, затем вы можете запустить процесс вручную, запустив MyApp.Repo.start_link([])
. - вы можете добавить это в свою миграцию, чтобы посмотреть, подходит ли она:
x = MyApp.Repo.start_link([])
IO.inspect(x)
Если вам повезет, вы получите :ok
и идентификатор процесса, но если нет, вам следует получить некоторые полезные отладочная информация.
Надеюсь, это поможет.