将 iex shell 附加到正在运行的 elixir 应用程序

Posted

技术标签:

【中文标题】将 iex shell 附加到正在运行的 elixir 应用程序【英文标题】:Attach an iex shell to a running elixir application 【发布时间】:2015-12-03 11:05:06 【问题描述】:

我有一个在 heroku 上运行的 elixir (mix) 应用程序

我在将远程 iex shell 附加到此应用程序时遇到问题

应用程序通过以下命令启动:

web: MIX_ENV=prod elixir --sname server -S mix run --no-halt

我在本地附加外壳没有问题

MIX_ENV=prod elixir --sname server -S mix run --no-halt
iex --sname console --remsh server@mru2

但是,在 heroku 上尝试时,我遇到了以下问题:

heroku run "iex --sname console --remsh server@41959264-bef2-4d2e-b5de-6dcf618efa44"
Running `iex --sname console --remsh server@41959264-bef2-4d2e-b5de-6dcf618efa44` attached to terminal... up, run.4421
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

Could not contact remote node server@41959264-bef2-4d2e-b5de-6dcf618efa44, reason: :nodedown. Aborting...

heroku run 启动的实例似乎无法连接到运行服务器的实例。我尝试强制执行通用 cookie,但无济于事。

我错过了什么?

【问题讨论】:

【参考方案1】:

我几乎肯定 Heroku dynos 上运行的节点不允许相互通信。但只要 cookie 在两个节点之间共享并且您连接到正确的完全限定名称,那么您上面采取的步骤是正确的。

【讨论】:

没错。不允许 Heroku 测功机进行通信。这就是为什么像 Phoenix 这样的项目允许你在 Heroku 上通过 redis 进行 pubsub。 不好意思,我想我需要找一个不同的主机。感谢您的回答 出于这个原因,我将尝试使用 flynn.io 作为 heroku 的替代品。

以上是关于将 iex shell 附加到正在运行的 elixir 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Elixir IEx shell,如何突破当前的“接收”块

为输入 iex shell 着色

如何在不编译更改的文件的情况下运行`iex -S mix`?

Elixir IEX在显示提示之前停止,并且不接受输入

如何重新编译 Elixir 项目并从 iex 中重新加载它?

如何将整数附加到现有二进制文件