【问题标题】:Recompile and reload IEx without leaving IEx重新编译并重新加载 IEx 而不离开 IEx
【发布时间】:2019-06-20 14:51:35
【问题描述】:

如何重新编译和重新加载 IEx(杀死所有进程)。当我退出控制台并再次启动它但不离开 IEx 时,我要达到的是相同的行为。

我在函数中做

IEx.Helpers.recompile()
Process.exit self, :kill      

但我收到红色消息:(EXIT from #PID) shell process exited with reason:killed 这很烦人。

【问题讨论】:

  • 不确定你想要实现什么,但如果你使用像 Sugar 这样的框架,你可以使用 hot-code-reload(查看代码示例:sugar-framework.github.io/getting-started/…),很确定 Phoenix 支持它也;然后,您的进程就会失败,并在检测到新来源时重新启动。
  • 我在测试期间从控制台手动运行了许多机器人。它们是 GenStages,可以相互通信和其他 Web 服务,我不使用 Phoenix。我做了代码更改,并希望在某些情况下从头开始测试。
  • 但是如果你重新编译,杀掉一切,销毁所有状态,不重启iex有什么好处呢?
  • 顺便说一句,简单的解决方法是在一个共同的主管下启动您的进程,然后使用该主管杀死/重新启动进程
  • 谢谢你,dualed,我会考虑普通的主管,可能对我不需要关闭所有进程的一些情况有用。该值是为了方便在一个短命令中执行,例如“re”,无需按两次Ctrl-C退出然后运行解释器。

标签: elixir


【解决方案1】:

IEx.Helpers 模块中似乎没有重新启动所有进程的功能。但是,您可以使用应用程序模块功能来停止/启动您的混合应用程序。

建议的解决方案是:

Application.stop(:my_app_name)
recompile()
Application.start(:my_app_name)

【讨论】:

  • 不幸的是,它不会杀死我在测试期间运行的手动启动的进程。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 2016-11-02
  • 2016-10-04
  • 2021-03-22
  • 2017-03-15
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多