1

当您运行类似的服务器MIX_ENV=prod mix phx.server,然后在连接到同一服务器的另一个屏幕上尝试运行附加的混合环境 iex 会话iex -S mix时,您会收到错误并关闭并抱怨类似Failed to start Ranch listener VukWeb.Endpoint.HTTP in :ranch_tcp:listen([port: 4000]) for reason :eaddrinuse (address already in use)

当服务器在连接到同一数据库的单独屏幕中运行时,有没有办法运行 iex 会话?我很困惑为什么iex -S mix还要尝试连接到外部端口,因为 iex 会话应该没有服务器运行,也不需要外部端口来加载混合环境?

我知道您可以使用类似的 iex 会话运行服务器MIX_ENV=prod iex -S mix phx.server,但我的理解是,这既不是性能的理想选择,也不是在处理请求时让您的 iex 会话被用户日志流中断(这就是我们)现在正在做)。我也尝试像这样切换端口,MIX_ENV=prod PORT=4040 iex -S mix但标志似乎被忽略了,因为投诉返回与端口 4000 的引用相同。我想知道是否可能有一些硬编码导致环境变量被忽略,如果像这样撤消这种硬编码并将其切换到不同的端口是正确的方法,即使该端口未被非服务器混合环境使用。

如果有人对如何同时获得 iex 会话和服务运行有提示 - 或者对工作流程有不同的建议,使这种愿望变得不必要 - 很想听听!

谢谢

4

1 回答 1

2

Mix有一个完美的非常详细的文档。

Mix.Tasks.Run是默认任务。iex -S -mix本质上等同于iex -S mix run

后者启动您的应用程序,[合理猜测] 反过来cowboy作为依赖项启动。因此错误。

 iex -S mix run --no-start

就是你要找的。此任务接受几个参数,其他在我链接的帮助页面上列出。

于 2019-02-08T06:06:16.150 回答