Elixir/Phoenix:生产环境服务器启动报:eafnosupport错误
解决Phoenix生产模式启动时的
:eafnosupport错误 没错,你遇到的这个错误确实和IPv6(:inet6)配置直接相关。:eafnosupport的含义是"地址族不被协议族支持",说明你的生产环境服务器不支持IPv6,但Ranch(Phoenix底层的监听库)尝试以IPv6模式启动监听,导致失败。
你之前尝试的http: [:inet, port: 4000]无效,是因为配置格式不对——Phoenix的HTTP配置需要是关键字列表,而不是把:inet作为列表的第一项。正确的配置方式有两种:
方法1:强制指定使用IPv4地址族
在prod.exs里修改Endpoint的http配置,添加:family选项明确指定用IPv4:
config :hermes, HermesWeb.Endpoint, http: [port: 4000, family: :inet], url: [scheme: "https", host: "myhost", path: "/hermes/4000", port: 443], cache_static_manifest: "priv/static/cache_manifest.json"
方法2:绑定到具体的IPv4地址
如果你的服务器需要绑定到特定IPv4(比如0.0.0.0,允许所有IPv4访问),可以直接指定:ip参数:
config :hermes, HermesWeb.Endpoint, http: [port: 4000, ip: {0, 0, 0, 0}], url: [scheme: "https", host: "myhost", path: "/hermes/4000", port: 443], cache_static_manifest: "priv/static/cache_manifest.json"
额外检查点
如果你使用的是Phoenix 1.6及以上版本,还要确认runtime.exs里有没有覆盖HTTP配置——有时候运行时配置会覆盖prod.exs的设置,确保那里的http配置也包含上述的:family或:ip参数。
修改完成后,记得重新编译生产环境代码:
MIX_ENV=prod mix compile
然后再启动服务ENV=prod mix phx.server,应该就能正常启动了。
内容的提问来源于stack exchange,提问作者Thomas Sonntag
相关产品推荐
相关产品推荐

