首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >灵丹妙药exrm控制台可以工作,但应用程序不会自动启动。

灵丹妙药exrm控制台可以工作,但应用程序不会自动启动。
EN

Stack Overflow用户
提问于 2015-06-11 00:20:47
回答 2查看 309关注 0票数 0

以前问过一个问题关于让exrm为我的项目工作。这个答案让我意识到,我可以构建我的版本(在dev模式下)并通过控制台访问它。

然而,有几个问题:

  1. 当我通过rel/my_app/bin/my_app console打开控制台时,我的应用程序实际上不会启动。我得打电话给Application.start(:my_app)才能开始工作。
  2. 打电话给rel/my_app/bin/my_app start不会启动我的应用程序。我可以看到epmd、beam.smp和run_erl进程已经启动,但我自己的应用程序似乎没有运行。

很肯定这两个问题是相关的。

对控制台采取的步骤:

代码语言:javascript
复制
$ mix release --dev
$ ./rel/my_app/bin/my_app console
iex(my_app@127.0.0.1)1> Application.start(:my_app)
# at this point the app is running until I ctrl+c

启动所采取的步骤:

代码语言:javascript
复制
$ mix release --dev
$ ./rel/my_app/bin/my_app start

$ ps aux | grep "my_app"

12235   0.0  0.0  2460212    636   ??  S    11:10am   0:00.19 /Users/me/code/my_app/rel/my_app/erts-6.3.1/bin/epmd -daemon

17565   0.0  0.2  2524256  26236 s008  Ss+   4:03pm   0:00.37 /Users/me/code/my_app/rel/my_app/erts-6.3.1/bin/beam.smp -- -root /Users/me/code/my_app/rel/my_app -progname Users/me/code/my_app/rel/my_app/bin/my_app -- -home /Users/me -- -boot /Users/me/code/my_app/rel/my_app/releases/0.0.1/my_app -boot_var ERTS_LIB_DIR /Users/me/code/my_app/rel/my_app/erts-6.3.1/../lib -config /Users/me/code/my_app/rel/my_app/releases/0.0.1/sys.config -pa /Users/me/code/my_app/rel/my_app/lib/consolidated -name my_app@127.0.0.1 -setcookie my_app -user Elixir.IEx.CLI -extra --no-halt +iex -- console

17562   0.0  0.0  2452008    588   ??  S     4:03pm   0:00.00 /Users/me/code/my_app/rel/my_app/erts-6.3.1/bin/run_erl -daemon /Users/me/code/my_app/rel/my_app/tmp/erl_pipes/my_app/ /Users/me/code/my_app/rel/my_app/log exec "/Users/me/code/my_app/rel/my_app/bin/my_app" "console"

$ tail /var/log/system.log

Jun  9 16:03:14 me.local my_app[17565][17597]: Starting up

我可以看出,我的应用程序没有运行,因为它应该从队列中消耗并写入数据存储。但是,在启动发行版时,队列永远不会被消耗。不幸的是,除了“启动”行之外,我找不到更多的日志输出或错误。

我需要传递给exrm的start命令才能让它运行我的应用程序吗?

如果没有,是否有一种通过指向某个地方或检查内部进程来调试这一点的方法?

EN

回答 2

Stack Overflow用户

发布于 2015-06-11 03:47:50

查看之前发布的mix.exs,您需要将自己的应用程序添加到applications中。这告诉VM应该在运行时启动哪些应用程序。有些应用程序是在开箱即用的情况下启动的(如:kernel:stdlib等),您不需要添加这些应用程序,但是任何想要自动启动的应用程序都应该放在applications中。您可以在included_applications中放置不需要启动的应用程序,因为这些应用程序已经加载,但没有启动。

票数 2
EN

Stack Overflow用户

发布于 2015-07-12 19:03:16

您需要在mix.exs中定义应用程序,以便自动启动它:

代码语言:javascript
复制
def application do
  [applications: [],
   mod: {MyAppModule, []}]
end

所以mod:{MyAppModule,[]}意味着将自动调用MyAppModule.start_link()。

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

https://stackoverflow.com/questions/30769548

复制
相关文章

相似问题

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