【发布时间】:2017-10-16 20:17:23
【问题描述】:
我目前正在尝试编写一个混合任务,以在 phoenix (v1.3) 项目中自动构建 Elm 应用程序的脚手架。它正在生成所有 elm 文件/js 脚本以正确添加、安装节点和 elm 模块。我还生成了一个elm_view.ex 和elm_controller.ex,它采用当前otp_app 的名称,它会正确输出文件,如下所示:
defmodule PipeDream.Web.ElmController do
use PipeDream.Web, :controller
def index(conn, _params) do
render conn, "index.html"
end
end
但是,当我使用mix phx.server 启动服务器时,我收到一个错误:"module PipeDream.Web.ElmController is not available"。我发现当我转到这些文件并保存它们时,模块会被正确拾取(elm_view.ex 的类似错误)。
这可能与我渲染controller 和view 模板的方式有关吗?模板如下所示:
defmodule <%= @app_name %>.Web.ElmController do
use <%= @app_name %>.Web, :controller
def index(conn, _params) do
render conn, "index.html"
end
end
我使用EEx.eval_string(template_string, assigns: [app_name: app]) 添加应用模块名称,然后使用Mix.Generator.create_file 写入文件
非常感谢您提供任何帮助或建议!
【问题讨论】:
-
所以文件是在磁盘上创建的,但是
mix phx.server只有在您在编辑器中手动打开文件并保存它们(不做任何更改)后才会选择它? -
是的,没错
-
你能发布 Mix 任务的来源(你在哪里调用
create_file等)吗? -
我认为文件创建时间可能存在问题。只是出于好奇,您会
File.touch/2将新创建的文件以 localtime 作为第二个参数吗?另外,我建议你使用Mix.Generator.embed_template/2来编译和嵌入模板。
标签: elixir phoenix-framework elixir-mix