Elixir / Phoenix应用程序中的编译错误:
== Compilation error on file web/views/layout_view.ex ==
** (CompileError) web/views/layout_view.ex:2: module Myapp.Router.Helpers is not loaded and could not be found
expanding macro: Myapp.Web.__using__/1
web/views/layout_view.ex:2: Myapp.LayoutView (module)
(elixir) expanding macro: Kernel.use/2
web/views/layout_view.ex:2: Myapp.LayoutView (module)
(elixir) lib/kernel/parallel_compiler.ex:117: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1
我的web.ex是一个标准的,没有什么新东西。
答案 0 :(得分:15)
如果其中一个插件导入MyApp.Router.Helpers
,并且同时在MyApp.Router
本身使用,我就已经看到了这种情况。这会产生编译器死锁 - 为了编译路由器需要插件,但为了编译插件,需要路由器(和辅助模块)。
您可以通过使用对路由器帮助程序的完全限定调用来解决此问题,而不是导入它们,即
alias MyApp.Router.Helpers, as: Routes
Routes.foo_path(conn, :create)
答案 1 :(得分:8)
当我的一个插件包含错误并且没有编译时,这也发生在我身上。通过注释掉我的路由器的内容并再次编译,我能够看到插件中的编译错误。在修复它们并取消注释我的路由器的内容后,它能够正常编译。
答案 2 :(得分:4)
由于“苦艾”模式中的错误而导致了相同的错误,忘记为某些已用模块命名。在rmarscher的建议下找到了它,并对MyApp.Router.Helpers使用的所有区域进行了评论,并得到了真正的错误。