如何在 phoenix 中 运行 可执行版本构建?

How can I run executable release build in phoenix?

我们正在使用蒸馏器在我们的中创建可执行构建版本 凤凰应用。我们正在使用 docker 在 Digital Ocean 上部署我们的应用程序。由于我们不想与其他机器共享代码,我们希望将构建编译文件作为可执行文件执行,我们可以通过命令行在远程机器上 运行。

所以经过一些研究,我们发现 distillery plugin 构建可执行版本,它使用

创建一个构建
mix release --executable

我们能够创建版本。它提供了三个命令给运行这些

 punitjain@apple:project$ _build/dev/rel/project/bin/project foreground
 punitjain@apple:project$ _build/dev/rel/project/bin/project start
 punitjain@apple:project$ _build/dev/rel/project/bin/project console

我在 运行 宁前台命令

后出现以下错误
>  $ _build/dev/rel/project/bin/project foreground [info] Application
> project exited: Project.start(:normal, []) returned an error:
> shutdown: failed to start child: Project.Endpoint
>     ** (EXIT) shutdown: failed to start child: Phoenix.CodeReloader.Server
>         ** (EXIT) an exception was raised:
>             ** (UndefinedFunctionError) function Mix.Project.config/0 is undefined (module Mix.Project is not available)
>                 Mix.Project.config()
>                 (phoenix) lib/phoenix/code_reloader/server.ex:29: Phoenix.CodeReloader.Server.init/1
>                 (stdlib) gen_server.erl:328: :gen_server.init_it/6
>                 (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3 {"Kernel pid
> terminated",application_controller,"{application_start_failure,project,{{shutdown,{failed_to_start_child,'Elixir.Project.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.CodeReloader.Server',{undef,[{'Elixir.Mix.Project',config,[],[]},{'Elixir.Phoenix.CodeReloader.Server',init,1,[{file,\"lib/phoenix/code_reloader/server.ex\"},{line,29}]},{gen_server,init_it,6,[{file,\"gen_server.erl\"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,247}]}]}}}}},{'Elixir.Project',start,[normal,[]]}}}"}
> 
> Crash dump is being written to: erl_crash.dump...done Kernel pid
> terminated (application_controller)
> ({application_start_failure,project,{{shutdown,{failed_to_start_child,'Elixir.Project.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.Code

你能帮我解决这个错误吗?

我也很高兴听到是否有人有更好的方法来创建可执行的发布文件。我可以在任何基于 Linux 的系统中使用它进行部署,而无需使用 Docker.

公开我的源代码

如果我需要提供更多信息或对问题进行任何修改,请告诉我。 谢谢

问题是您正在使用 MIX_ENV=dev 构建版本,对于 Phoenix 这将意味着包含代码重新加载器,并且代码重新加载器在版本中不起作用。您应该使用 MIX_ENV=prod 构建版本或在 dev.

中禁用代码重新加载器