Phoenix live reload在编译错误时中断

时间:2016-08-01 23:11:46

标签: elixir phoenix-framework

偶尔,当我在我的Elixir代码中输入拼写错误并发生CompileError时,即使我修复了所有内容,凤凰也拒绝重新加载,并继续打印App.Endpoint.path/1 is undefined({{ 1}}是我的应用程序)。当然,端点 定义得非常好,并且在我重新启动App后再次工作。

据我所知,我对所有内容的最新版本都有所了解。由于我无法在网上找到任何有关此错误的信息,因此我怀疑我错误配置了某些内容,并且感谢您就如何追溯其根源提出建议。

mix phoenix.server

1 个答案:

答案 0 :(得分:2)

看起来Phoenix的实时重载功能是Endpoint的一部分,所以一旦后者崩溃,代码重新加载就不再起作用了。

可以通过在端点下的代码中插入错误来使端点崩溃,例如:添加plug :some_imaginary_plug或在router.ex中导致语法错误,因为路由器也插入了端点。

现在,事实证明我正在forward使用Absinthe包,直接向Absinthe插件发送所有/graphql个请求。因此,任何GraphQL类型定义和相关的resolver函数(恰好构成我的应用程序的大部分)都是脆弱的:由于它们间接(但不可避免地)导致端点崩溃,任何不显眼的CompileError

我找到的最佳解决方法 - 直到Absinthe开发人员设法使解析器独立于defs类型(他们建议他们将使用它们) - 使用iex -S mix phoenix.server启动服务器,并手动运行{{ 1}}每当端点崩溃时。虽然这并没有解决CodeReloader作为Endpoint的一部分的根本问题,而不是相反,但它使我不必每次都重新运行webpack,这是最大的痛点。