2017-04-26 48 views
2

當我運行自定義在我的鳳凰應用混合任務(我認爲它甚至沒有涉及到鳳凰,但仍然)使用一些外部庫(如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)

到混音任務。所以我的問題是爲什麼我的所有依賴不會自動啓動?是我誰做錯了什麼?

回答

6

說得沒錯,應用程序的依賴項默認情況下不會在混合任務中啓動。他們需要手動啓動。啓動所有應用程序依賴項的最簡單方法是調用Mix.Task.run("app.start")(如果Mix不可用,則爲Application.ensure_all_started(:my_app))。有了這個,mix.exs文件中列出的所有應用程序將在它們尚未運行時啓動。

如果你想使你的新的混合任務,使用你的應用程序的 基礎設施,你需要確保應用程序是:

這是附近的Mix Tasks頁面上的鳳凰框架部位的結束記錄當 混合任務正在執行時啓動。如果您需要 從混合任務中訪問您的數據庫,這特別有用。值得慶幸的是,組合,使 它很容易爲我們:

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

文檔似乎已經感動:https://hexdocs.pm/phoenix/phoenix_mix_tasks.html#creating-our-own-mix-tasks –