Deployment 如何在phoenix中运行可执行版本构建?
我们正在使用distillery在我们的系统中创建一个可执行的构建版本 凤凰城申请。我们正在使用docker在Digital Ocean上部署我们的应用程序。因为我们不想与其他机器共享代码,所以我们希望将编译后的构建文件作为可执行文件执行,我们可以通过命令行在远程机器上运行该文件 所以经过一些研究,我们发现build可执行版本使用Deployment 如何在phoenix中运行可执行版本构建?,deployment,elixir,phoenix-framework,distillery,Deployment,Elixir,Phoenix Framework,Distillery,我们正在使用distillery在我们的系统中创建一个可执行的构建版本 凤凰城申请。我们正在使用docker在Digital Ocean上部署我们的应用程序。因为我们不想与其他机器共享代码,所以我们希望将编译后的构建文件作为可执行文件执行,我们可以通过命令行在远程机器上运行该文件 所以经过一些研究,我们发现build可执行版本使用 mix release --executable 我们能够创建这个版本。它提供了三个命令来运行这些 punitjain@apple:project$ _build
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
中禁用代码重新加载程序。问题是,您正在使用MIX_ENV=dev
构建发行版,而Phoenix则意味着包含代码重新加载程序,并且代码重新加载程序在发行版中不起作用。您应该使用MIX_ENV=prod
构建发行版,或者禁用dev
中的代码重新加载程序。您可以试试MIX_ENV=prod MIX release--executable--ENV=prod
?您应该在\u build/prod
中获得该版本。您可以尝试MIX\u ENV=prod MIX release--executable--ENV=prod
?您应该在\u build/prod
中获得该版本。我在prod
env中尝试了它,但仍然面临相同的问题。我还通过删除应用程序中的phoenix\u live\u reload
插件进行了检查,它仍然给出相同的错误。你确定是相同的错误吗?因为堆栈跟踪清楚地表明代码重新加载程序是失败的,所以如果出现相同的错误,您就无法删除它。是的,我通过在配置文件中设置code\u reload:false
解决了此问题。我在仍然面临相同问题的prod
env中尝试了它。我还通过删除应用程序中的phoenix\u live\u reload
插件进行了检查,它仍然给出相同的错误。你确定是相同的错误吗?因为堆栈跟踪清楚地表明代码重新加载程序是失败的,所以如果出现相同的错误,您就无法删除它。是的,我通过在配置文件中设置code\u reload:false
解决了这个问题