如何使用Phoenix项目的lib /文件夹中定义的模块?

时间:2017-01-12 02:11:08

标签: module elixir phoenix-framework autoload load-path

我在lib/内创建了一个模块,更具体地说是lib/my_namespace/test_module.exs

这是其中定义的所有内容:

defmodule MyNamespace.TestModule do
  def test do
    "This is a test"
  end
end

在Phoenix Controller中调用此模块的test()功能会产生错误。

** (UndefinedFunctionError) function MyNamespace.TestModule.test/0 is undefined (module MyNamespace.TestModule is not available)
    MyNamespace.TestModule.test()

根据Elixir 1.2.0 Changelog,我理解Elixir是为了重新加载lib/目录中的代码,所以我的假设是我不需要做任何其他事情。< / p>

我显然是错的,我自己的研究并没有产生任何有希望的东西。我收集的唯一一件事是我的模块没有进入?loadpath?我不确定要改变什么,所以它在加载路径上。

有人可以伸出援助之手,并指出我应该阅读哪些文件的方向?

提前致谢。

1 个答案:

答案 0 :(得分:1)

.exs files are meant for scripting并且mix和项目的其余部分编译为字节码。如果您希望能够从应用程序访问其中定义的模块,则应将lib/my_namespace/test_module.exs重命名为lib/my_namespace/test_module.ex