gpt4 book ai didi

elixir - Phoenix 应用中的自定义混音任务

转载 作者:行者123 更新时间:2023-12-01 08:23:47 24 4
gpt4 key购买 nike

当我在我的 Phoenix 应用程序中运行自定义 Mix 任务时(我认为它甚至与 Phoenix 无关,但仍然使用一些外部库(例如 https://github.com/knrz/geocoder )我得到

** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
:erlang.send(:geocoder_workers, {:"$gen_cast", {:cancel_waiting, #Reference<0.0.1.13074>}}, [:noconnect])

直到我添加
Application.ensure_all_started(:geocoder)
到混合任务。所以我的问题是为什么我的所有依赖项都没有自动启动?是我做错了吗?

最佳答案

没错,默认情况下,您的应用程序的依赖项不会在 Mix 任务中启动。它们需要手动启动。启动所有应用程序依赖项的最简单方法是调用 Mix.Task.run("app.start")(如果 Mix 不可用,则调用 Application.ensure_all_started(:my_app))。这样,如果您的 mix.exs 文件中列出的所有应用程序尚未运行,它们将被启动。

这记录在 Phoenix Framework 站点上 Mix Tasks 页面的末尾附近:

If you want to make your new mix task to use your application's infrastructure, you need to make sure the application is started when mix task is being executed. This is particularly useful if you need to access your database from within the mix task. Thankfully, mix makes it really easy for us:

def run(_args) do
Mix.Task.run "app.start"
Mix.shell.info "Now I have access to Repo and other goodies!"
...
end

关于elixir - Phoenix 应用中的自定义混音任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643970/

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