首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于生成ex文件的自定义混合任务

用于生成ex文件的自定义混合任务
EN

Stack Overflow用户
提问于 2017-05-17 19:31:48
回答 1查看 541关注 0票数 0

我目前正在尝试编写一个混合任务,它可以自动化phoenix (v1.3)项目中榆树应用程序的搭建。它正在生成要添加的所有elm文件/ js脚本,并正确安装节点和elm模块。我还生成了一个采用当前otp_app名称的elm_view.exelm_controller.ex,它正确地输出了文件,如下所示:

代码语言:javascript
复制
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类似的错误)。

这可能与我呈现controllerview模板的方式有关吗?模板如下所示:

代码语言:javascript
复制
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编写文件

将非常感谢任何帮助或建议!

EN

回答 1

Stack Overflow用户

发布于 2017-05-18 13:36:55

由于上面有很多评论,我决定发布一个老生常谈但仍然有效的解决方案,作为对未来访问者的答案。

当Elixir/Mix尝试缓存/检查依赖项时,存在某种类型的文件创建时间问题。虽然Steve Pallen (rm -rf deps && rm -rf _build && mix do deps.get, deps.compile, compile)提出的大锤解决方案应该总是有效的,但可能有一个更方便的技巧:对新生成的文件调用File.touch/2来强制Mix重新编译它们。

另外,作为附注,我建议使用Mix.Generator.embed_template/2而不是通用的EEx.eval_string来编译和嵌入模板,以明确意图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44023654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档