0

我们正在使用 distillery 在我们的 phoenix 应用程序中创建一个可执行的构建版本。我们正在使用 docker 在 Digital Ocean 上部署我们的应用程序。由于我们不想与另一台机器共享代码,我们希望将构建编译文件作为可执行文件执行,我们可以通过命令行在某个远程机器上运行它。

因此,经过一些研究,我们发现distillery 插件构建可执行版本,它使用

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 公开我的源代码。

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

4

1 回答 1

3

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

于 2017-09-06T19:51:13.683 回答