我有一个Elixir / Mix应用程序(也有凤凰城,但也有很多非凤凰城的东西),而且我想知道什么是最佳实践,以便进入"启动"代码,例如动态地将孩子添加到主管,解雇"我活着!" ping或其他你希望在启动后立即发生的事情。
一个显而易见的地方是j
文件,但预期的返回是Application
的返回。所以,例如,在Phoenix应用程序中,我可以这样做:
Supervisor.start_link(children, opts)
这似乎不对,但我无法弄清楚我应该把这段代码放在哪里。
答案 0 :(得分:2)
完全没问题。你凤凰应用程序只是一个OTP应用程序,你可以随心所欲地射击自己的脚。 Application.start
只需要一个{:ok, pid}
元组,它基本上就是应用程序的顶级进程。
我通常首先放置自定义启动代码,然后设置主管理程序规范并启动该管理程序 - 请注意,如果您在启动“动态管理程序”和添加应用程序之间有顺序依赖关系,就好像是这样的情况上面,你可能会因为时间问题而失败 - 我会在规范中正确配置该主管,以便它可以在其init
回调中执行操作,但我不知道您的代码或您的要求。
无论如何,只要您遵守合同,Application.start
就是您的全部: - )