release - 运行 Phoenix 应用程序版本时 exrm 崩溃

标签 release elixir phoenix-framework exrm

我正在尝试创建库存的发布 Phoenix应用程序(基于 Elixir 和 Erlang)使用 exrm .

dev 的第一个版本混合环境创建良好,但使用 ./rel/my_app/bin/my_app console 运行时崩溃。在 Vagrant/Virtual Box 虚拟机中运行 Ubuntu 14.04 时会发生这种情况。

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

您可以在这里找到该应用程序:https://github.com/mavenastic/my_app 。它包括在 VM 上安装依赖项和创建项目所采取的步骤(请参阅 STEPS.md )以及 Erlang crash dump .

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

{"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运行良好。但是,我无法 ping 服务器,也无法在启动后运行远程控制台,因此应用程序的正常运行似乎仍然缺少一些内容。

$ 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 创建一个版本。或任何其他环境。因此,缺失的部分可能会影响这两种环境。

提前致谢!

最佳答案

对我来说,问题似乎是您在 dev 环境(而不是 prod env)中创建版本。

这部分:

{undef,[{'Elixir.Mix.Project',config,[],[]}

(可怕且令人敬畏的 Erlang)错误消息基本上表明 Mix.Project.config/0 未定义。 Mix 不包含在发行版中,但我猜 Phoenix 在其代码重新加载器中使用了它,而您通常不会在生产中运行它。

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

关于release - 运行 Phoenix 应用程序版本时 exrm 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33316661/

相关文章:

iphone - 使用Dealloc和ViewDidUnload释放变量的正确方法

elixir - Ecto如何过滤一个有多个直通关系

elixir - 如何从另一个Phoenix应用程序连接到远程/外部Phoenix应用程序 channel ?

elixir - 在 elixir 中重复字符串 n 次

Maven 发布插件未显示在 Jenkins 中

具有多个分支的Maven项目修补程序版本的Git merge 策略

android - 2 年后更新的 Android 应用程序,无法让它出现在商店中

elixir - 在 Phoenix LiveView 中提交后重置表单输入字段

testing - 如何为 ExUnit 实现 "assert_difference"

elixir - 我可以将插头放在哪里,然后从 Phoenix 应用程序中的不同 Controller 使用它们?