当您运行像 MIX_ENV=prod mix phx.server
这样的服务器,然后在连接到同一服务器的另一个屏幕上尝试运行像 iex -S 这样的混合环境附加 iex session 时mix
然后你会得到一个错误并关闭,并显示类似 Failed to start Ranch Listener VukWeb.Endpoint.HTTP in :ranch_tcp:listen([port: 4000]) for Reason :eaddrinuse (address already in use) 的投诉)
当服务器在附加到同一数据库的单独屏幕中运行时,是否有办法运行 iex session ?我很困惑为什么 iex -S mix 甚至尝试连接到外部端口,因为 iex session 应该没有服务器运行,也不需要外部端口来加载混合环境?
我知道您可以使用 iex session 运行服务器,例如 MIX_ENV=prod iex -S mix phx.server
,但我的理解是,这对于性能来说既不理想,也不好在处理请求时,您的 iex session 被用户日志流中断(这就是我们现在正在做的事情)。我还尝试像 MIX_ENV=prod PORT=4040 iex -S mix
那样切换端口,但该标志似乎被忽略,因为投诉返回时与端口 4000 的引用相同。我是想知道是否可能有一些硬编码导致环境变量被忽略,并且只是撤消此硬编码并将其切换到像这样的不同端口是否是正确的方法,即使该端口被非服务器混合环境使用。
如果有人对如何同时运行 iex session 和服务有任何建议,或者对工作流程有不同的建议,使这种愿望变得不必要,我很乐意听到!
谢谢
最佳答案
Mix
有完善非常详细的文档。
Mix.Tasks.Run
是默认任务。 iex -S -mix
本质上等同于 iex -S mix run
。
后者启动您的应用程序,[疯狂合理的猜测]又将 cowboy
作为依赖项启动。因此出现错误。
iex -S mix run --no-start
就是你要找的东西。此任务接受多个参数,其他参数列在我链接的帮助页面上。
关于phoenix-framework - 如何在生产中运行连接到同一数据库和混合环境的 iex session 和 phoenix 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54586215/