如何在 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
.
中禁用代码重新加载器
我们正在使用蒸馏器在我们的中创建可执行构建版本 凤凰应用。我们正在使用 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
.