首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行带有exrm崩溃的凤凰应用程序发行版

运行带有exrm崩溃的凤凰应用程序发行版
EN

Stack Overflow用户
提问于 2015-10-24 09:37:28
回答 4查看 1.5K关注 0票数 5

我正在尝试使用Phoenix创建股票exrm应用程序(基于Elixir和Erlang)的发行版。

dev mix环境的第一个版本创建得很好,但是在使用./rel/my_app/bin/my_app console运行时会崩溃。这发生在运行Ubuntu14.04在Vagrant/Virtual虚拟机中。

在我的Mac电脑上,同样的设置运行良好。不幸的是,我需要在与目标服务器具有相同架构的机器上构建发行版,该服务器将运行Ubuntu。

您可以在这里找到应用程序:应用程序。它包括安装依赖项和在VM (请参阅STEPS.md)以及二郎坠机转储上创建项目所采取的步骤。

下面是我尝试运行控制台时遇到的错误:

代码语言:javascript
复制
{"Kernel pid terminated",application_controller,"{application_start_failure,my_app,{{shutdown,{failed_to_start_child,'Elixir.MyApp.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,240}]}]}}}}},{'Elixir.MyApp',start,[normal,[]]}}}"}

编辑:

我也尝试用MIX_ENV=prod mix release为生产环境创建一个版本。成功地生成了该版本,并且MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app console运行良好。但是,一旦服务器启动,我就无法平平服务器,也不能运行远程控制台,因此,似乎还缺少一些东西来使应用程序正常运行。

代码语言:javascript
复制
$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app start
$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app ping

=INFO REPORT==== 24-Oct-2015::10:28:25 ===
Protocol: "inet_tcp": register/listen error: econnrefused
escript: exception error: no match of right hand side value
                 {error,
                     {{shutdown,
                          {failed_to_start_child,net_kernel,
                              {'EXIT',nodistribution}}},
                      {child,undefined,net_sup_dynamic,
                          {erl_distribution,start_link,
                              [['my_app_maint_2551@127.0.0.1',longnames]]},
                          permanent,1000,supervisor,
                          [erl_distribution]}}}

$ ps aux | grep my_app
vagrant   2572  0.0  0.0   7532    96 ?        S    10:28   0:00 /vagrant/my_app/rel/my_app/erts-7.1/bin/epmd -daemon
vagrant   2575  0.0  0.2   9448  2256 pts/0    S+   10:28   0:00 grep --color=auto my_app

$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app remote_console
$

而且,根据我收集的信息,我应该能够为dev或任何其他环境创建一个发行版。因此,缺失的部分可能会影响这两个环境。

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-24 08:01:13

Per @bitwalker建议,使用master分支的exrm解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2015-10-24 10:11:28

在我看来,问题似乎是在您的dev环境中创建发行版(而不是prod env)。

本部分:

代码语言:javascript
复制
{undef,[{'Elixir.Mix.Project',config,[],[]}

在(可怕而令人敬畏的la Erlang)错误消息中,基本上说Mix.Project.config/0是未定义的。Mix并不包括在发行版中,但我猜菲尼克斯在它的代码重新加载器中使用它,您通常不会在生产中运行它。

尝试用MIX_ENV=prod生成发行版,看看它是否有效。

票数 2
EN

Stack Overflow用户

发布于 2015-10-26 14:38:02

我把这写进了问题追踪器,但也只是为了子孙后代:

您需要将server: true添加到MyApp.Endpoint配置下的prod.exs中。凤凰就是这样在发行版中开始自己的。

对于菲尼克斯,我建议在发行版中始终使用MIX_ENV=prodMIX_ENV=dev有许多特定于开发的特性(比如代码重新加载),这些特性要么不能在发行版内工作,要么不能按预期工作。

如果您收到配置错误,可能是因为您在特定于环境的文件中缺少了一些所需的凤凰配置。您可以通过运行MIX_ENV=prod mix compile来测试它是否成功编译。您还可以使用--verbosity=verbose构建您的发行版,以获得用于跟踪问题的详细输出。

您之所以不能对发布进行ping或控制台操作,是因为它在启动时失败了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33316661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档