当您运行诸如MIX_ENV=prod mix phx.server
之类的服务器,然后在连接至该服务器的另一个屏幕上尝试运行诸如iex -S mix
之类的混合环境附加iex会话时,您会收到错误消息并因投诉而关闭像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会话应该没有服务器在运行,也不需要仅用于加载混合环境的外部端口?
我知道您可以使用MIX_ENV=prod iex -S mix phx.server
之类的iex会话来运行服务器,但是我的理解是,这对性能而言既不理想,也不能让iex会话被请求的用户日志流打断,这很好被处理(这就是我们现在正在做的)。我也尝试过像MIX_ENV=prod PORT=4040 iex -S mix
那样切换端口,但是该标志似乎被忽略了,因为抱怨再次返回,引用了端口4000。我想知道是否存在某种硬编码导致环境变量可以忽略不计,并且即使只是撤消此硬编码并将其切换到其他端口,这也是正确的方法,即使该端口被非服务器混合环境未使用。
如果有人对如何实现iex会话和服务运行有个建议,或者对工作流程提出了其他建议,而这种建议使这种愿望变得不必要,那么我们将非常乐意听!
谢谢
答案 0 :(得分:1)
Mix
有非常完美的非常详细的文档。
Mix.Tasks.Run
是默认任务。 iex -S -mix
本质上等同于iex -S mix run
。
后者将启动您的应用程序,[出于合理的猜测]随后将cowboy
作为依赖项启动。因此是错误。
iex -S mix run --no-start
是您要寻找的。此任务接受几个参数,其他参数在我链接的帮助页面上列出。