如何在生产环境中运行连接到同一数据库和混合环境的iex会话和phoenix服务器?

时间:2019-02-08 05:00:53

标签: elixir phoenix-framework mix elixir-framework iex

当您运行诸如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会话和服务运行有个建议,或者对工作流程提出了其他建议,而这种建议使这种愿望变得不必要,那么我们将非常乐意听!

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

后者将启动您的应用程序,[出于合理的猜测]随后将cowboy作为依赖项启动。因此是错误。

 iex -S mix run --no-start

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