【问题标题】:phoenix view module not available凤凰视图模块不可用
【发布时间】:2017-04-16 20:51:05
【问题描述】:

我的应用程序工作正常,api json 请求和常规 html。我的路由器.ex

defmodule MyApp.Router do
  use MyApp.Web, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
  end

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/api", MyApp do
    pipe_through :api # Use the default browser stack

    scope "/v1", V1, as: :v1 do
      resources "/users", UserController, except: [:new, :edit, :index]
    end
  end

  scope "/", MyApp do
    pipe_through :browser # Use the default browser stack
    get "/confirm/:token",          UserController, :confirm, as: :user_confirm
  end

end

我的网站/controllers/v1/user_controller.ex

defmodule MyApp.V1.UserController do
  use MyApp.Web, :controller

  def create(conn, %{"user" => user_params}) do
   ...
          conn
          |> put_status(:created)
          |> put_resp_header("location", v1_user_path(conn, :show, user))
          |> render("sign_up.json", user: Map.put(user, :session, result[:session]))
   ...
  end

还有我的 web/controllers/user_controller.rb

defmodule MyApp.UserController do
  use MyApp.Web, :controller

  alias MyApp.User

  def confirm(conn, %{"token" => token}) do
...
            render(conn, "confirmed.html")
...
  end

end

我的网站/views/v1/user_view.ex

defmodule MyApp.V1.UserView do
  use MyApp.Web, :view
...
end

还有我的 web/views/user_view.ex

defmodule MyApp.UserView do
  use MyApp.Web, :view

end

在我为 html 添加路由和控制器之前,一切正常。 现在,当我请求 api json 时,我得到一个错误

Request: POST /api/v1/users
** (exit) an exception was raised:
    ** (UndefinedFunctionError) function MyApp.V1.UserView.render/2 is undefined (module MyApp.V1.UserView is not available)

但是如果我删除 web/vews/user_view.ex,那么这个查询就可以正常工作。 你如何纠正这个错误?

【问题讨论】:

  • 我有时会在出现编译问题并且我没有重新启动应用程序时看到这些错误。尝试双 crtl-c 出凤凰服务器。也尝试运行mix clean,重启凤凰服务器。我能想到的唯一另一件事是别名问题。您可以暂时重命名其中一个 UserView 模块,看看是否有帮助。
  • @StevePallen 是的,例如在 UserViewHtml 中重命名 MyApp.UserView 可以解决问题。但我希望有另一种解决方案
  • 也许编译/加载有问题。您也可以尝试将 Code.ensure_loaded/1 添加到您的 html 模块中。
  • 看来 mix clean 真的很有帮助!奇怪的是第一次没有帮助,但现在我再次运行它,它可以工作。谢谢!
  • 添加了一个答案,以便其他读者更快地访问。

标签: phoenix-framework


【解决方案1】:

这些类型的错误通常可以通过运行 mix clean 来解决。您可能还会在开发中的实时代码重新加载期间看到此类错误。遇到这种情况,尝试重启 Phoenix.Server,如果没有帮助,运行mix clean

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多