gpt4 book ai didi

elixir - Ecto 3 - 在自定义 CLI 任务中启动 Repo

转载 作者:行者123 更新时间:2023-12-03 20:16:16 24 4
gpt4 key购买 nike

如果您需要为混合任务访问数据库 - 您需要手动启动您的 ecto 存储库。当我们使用 ecto 2 时,我们有 ensure_started功能。

所以带有 ecto 2 的自定义 CLI 任务看起来像

defmodule App.Task do
use Mix.Task
import Mix.Ecto

def run(args) do
repos = parse_repo(args)

Enum.each repos, fn repo ->
ensure_repo(repo, args)
ensure_started(repo, []) # was deleted from ecto 3
ensure_started已从 ecto 3 中删除。我尝试了一些方法,但它们对我不起作用。有人知道 ecto 3 的解决方法吗?

更新

正如@starbelly 提到的 ensure_started已迁移至 Mix.EctoSQL所以我们需要添加额外的 import Mix.EctoSQL让它发挥作用
defmodule App.Cli.Task do
import Mix.Ecto
import Mix.EctoSQL

def start_ecto do
repos = parse_repo([])

Enum.each(repos, fn repo ->
ensure_repo(repo, [])
{:ok, _pid, _apps} = ensure_started(repo, [])
end)
end
end

最佳答案

您尝试导入和调用的函数已移入 ecto_sql。您应该import Mix.EctoSQLensure_started/2
例子:

defmodule Mix.Tasks.Friends.Hello do
use Mix.Task
import Mix.Ecto
import Mix.EctoSQL

def run(args) do
repos = parse_repo(args)

Enum.each(repos, fn repo ->
ensure_repo(repo, args)
{:ok, _pid, _apps} = ensure_started(repo, [])
Friends.Repo.all(Friends.Person)
end)
end
end

关于elixir - Ecto 3 - 在自定义 CLI 任务中启动 Repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com