我在Application.start
有一些工人(孩子)。如果phoenix应用程序从mix phx.server
以外的任务运行(例如,以mix ecto.reset
运行),则不应启动它们。
因此,如何在Application.start
中知道mix phx.server
正在运行代码?
答案 0 :(得分:2)
您可以使用Phoenix.Endpoint.server?(otp_app, endpoint)
检查端点是否在给定应用程序下运行其服务器。这里是文档:https://hexdocs.pm/phoenix/Phoenix.Endpoint.html#server?/2
答案 1 :(得分:0)
没有记录的方法来检查应用程序是否作为任务启动,例如。 G。因为应用程序对生产没有mix
依赖性。
通常,通过在项目配置中使用:included_applications
并在需要Application.start/2
时从Application.ensure_started/2
手动加载它们来解决这种微调。为了检查条件,可以使用环境变量(可选地通过任务别名):
LOAD_INCLUDED=app1,app2,app3 mix ecto.reset
和Application.start/2
中的某处:
"LOAD_INCLUDED"
|> System.get_env()
|> Enum.split(",")
|> Enum.map(&String.to_atom/1)
|> Application.ensure_started()
如果这些工人是您自己的工人,那就更容易了:只需调用Kernel.++/2
,并根据环境变量列出条件工人的清单即可。
边注:在生产中,该应用程序作为OTP版本启动,不包含mix
,因此对mix phx.server
的显式检查为零。