如何在凤凰城中运行可执行版本?

时间:2017-09-06 19:26:53

标签: deployment elixir phoenix-framework distillery

我们正在使用酒厂在我们的网站中创建可执行的构建版本 凤凰应用。我们正在使用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公开我的源代码。

如果我需要提供更多信息或进行任何相关修改,请告知我们。 感谢

1 个答案:

答案 0 :(得分:3)

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