Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 如何在phoenix中运行可执行版本构建?_Deployment_Elixir_Phoenix Framework_Distillery - Fatal编程技术网

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

Deployment 如何在phoenix中运行可执行版本构建?,deployment,elixir,phoenix-framework,distillery,Deployment,Elixir,Phoenix Framework,Distillery,我们正在使用distillery在我们的系统中创建一个可执行的构建版本 凤凰城申请。我们正在使用docker在Digital Ocean上部署我们的应用程序。因为我们不想与其他机器共享代码,所以我们希望将编译后的构建文件作为可执行文件执行,我们可以通过命令行在远程机器上运行该文件 所以经过一些研究,我们发现build可执行版本使用 mix release --executable 我们能够创建这个版本。它提供了三个命令来运行这些 punitjain@apple:project$ _build

我们正在使用distillery在我们的系统中创建一个可执行的构建版本 凤凰城申请。我们正在使用docker在Digital Ocean上部署我们的应用程序。因为我们不想与其他机器共享代码,所以我们希望将编译后的构建文件作为可执行文件执行,我们可以通过命令行在远程机器上运行该文件

所以经过一些研究,我们发现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
解决了这个问题