Phoenix 编程:未定义函数 page_path/2

2024-05-24

我的网络应用程序遇到问题,出现以下编译错误:

== Compilation error on file web/controllers/auth.ex ==
** (CompileError) web/controllers/auth.ex:49: undefined function page_path/2
    (stdlib) lists.erl:1338: :lists.foreach/2
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) lib/kernel/parallel_compiler.ex:117: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1

我知道大多数问题都与缺少路线有关router.ex,但看起来这里没有任何问题:

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

    get "/", PageController, :index
    get "/users/:id", UserController, :show
    resources "/users", UserController, only: [:index, :show, :new, :create]
    resources "/sessions", SessionController, only: [:new, :create, :delete]
    resources "/videos", VideoController

  end

  scope "/manage", Rumbl do
    pipe_through [:browser, :authenticate_user]

    resources "/videos", VideoController
  end

我的 web.ex 看起来像这样:

def router do
  quote do
    use Phoenix.Router
    import Rumbl.Auth, only: [authenticate_user: 2] # New import
  end
end

def controller do
  quote do
    use Phoenix.Controller

    alias Rumbl.Repo
    import Ecto
    import Ecto.Query, only: [from: 1, from: 2]

    import Rumbl.Router.Helpers
    import Rumbl.Gettext
    import Rumbl.Auth, only: [authenticate_user: 2] # New import

  end
end

auth.ex 看起来像这样

defmodule Rumbl.Auth do
  import Plug.Conn
  import Comeonin.Bcrypt, only: [checkpw: 2, dummy_checkpw: 0]
  import Phoenix.Controller
  alias Rumbl.Router.Helpers

  def init(opts) do
    Keyword.fetch!(opts, :repo)
  end

  def call(conn, repo) do
    user_id = get_session(conn, :user_id)
    user = user_id && repo.get(Rumbl.User, user_id)
    assign(conn, :current_user, user)
  end

  def login_by_username_and_pass(conn, username, given_pass, opts) do
    repo = Keyword.fetch!(opts, :repo)
    user = repo.get_by(Rumbl.User, username: username)

    cond do
      user && checkpw(given_pass, user.password_hash) ->
        {:ok, login(conn, user)}
      user ->
        {:error, :unauthorized, conn}
      true ->
        dummy_checkpw()
        {:error, :not_found, conn}
    end
  end

  def login(conn, user) do
    conn
    |> assign(:current_user, user)
    |> put_session(:user_id, user.id)
    |> configure_session(renew: true)
  end

  def logout(conn) do
    configure_session(conn, drop: true)
  end

  def authenticate_user(conn, _opts) do
    if conn.assigns.current_user do
      conn
    else
      conn
      |> put_flash(:error, "You must be logged in to access that page")
      |> redirect(to: page_path(conn, :index))
      |> halt()
    end
  end
end

在phoenix 1.4中,您需要使用模块名称调用函数

Routes.page_path(@conn, :create)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phoenix 编程:未定义函数 page_path/2 的相关文章

  • 在 Elixir 中部署时更改后端/模块?

    如何实现一个可替换的后端 或基本上任何部分或模块 以便可以在 Elixir 中的配置 部署时进行替换 我的具体情况是一个简单的网络应用程序 在本例中使用 Phoenix 但我猜这个问题也适用于其他情况 我有一个非常简单的后端 使用Agent
  • 有没有一种简单的方法可以查看 Elixir 宏扩展为什么?

    在过去 18 个月左右的时间里 Elixir 一直是我的首选语言 但有时我发现 无魔法 口头禅 特别是在 Phoenix 与 Rails 中引用 和宏的使用之间存在紧张关系 虽然我现在在使用没有宏的语言时会怀念宏 但我仍然希望能更容易地看到
  • 如何使用 Ecto 的时间戳向现有表添加时间戳?

    Since inserted at and updated at不可能是null这是行不通的 def change do alter table channels do timestamps end end Postgrex Error E
  • 如何调试eex模板和@变量?

    我有这个模板 div class alert alert danger p Oops something went wrong Please check the errors below p div 如何在 IEx 控制台中显示 chang
  • Elixir GenServer 并行handle_call

    Phoenix框架上有一个应用程序 需要 GenServer 它将检查一些值 这些值的验证从控制器开始 来自客户端的请求 GenServer 值检查 客户端接收响应 一旦handle call是同步的 那么当10个客户端同时调用10个han
  • Ecto 和 Elixir 的默认日期时间

    我今天刚刚开始使用 Elixir 和 Phoenix 我正在尝试添加 Ecto 作为映射器 但我在使用时间时遇到了一些问题 这是我的模型 schema users do field name string field email strin
  • GenServer 正常关闭

    我使用 GenServer 编写了一个 Elixir 应用程序 该应用程序在启动时启动外部应用程序 然后将其关闭 并在退出时进行其他清理 我在中添加了启动功能init 1 https hexdocs pm elixir GenServer
  • 如何在 Elixir 或 Phoenix 框架中安排代码每隔几个小时运行一次?

    假设我想每 4 小时发送一堆电子邮件或重新创建站点地图或其他任何内容 我该如何在 Phoenix 或仅使用 Elixir 做到这一点 有一个简单的替代方案 不需要任何外部依赖项 defmodule MyApp Periodically do
  • 如何通过 SSL 从 Phoenix Web App 连接到 PostgreSQL?

    When trying to run Elixir Phoenix Web Application using PostgreSQL Database hosted 3rd party Database as a Service Azure
  • 如何编写在日期时间字段上执行 group_by MONTH 的 Ecto 查询

    我正在执行 ecto 查询并尝试进行分组q created date 此查询成功执行了 GROUP BY 但它是按秒执行的 我正在尝试按月分组 MYQUERY gt group by q q created date q id 有没有类似的
  • Elixir Ecto:模式中的多个belongs_to关系

    我有以下架构 defmodule Message do use Ecto Schema schema messages do belongs to user FPL Club foreign key user to id belongs t
  • 分配 @changeset 在 eex 模板中不可用

    我正在尝试学习包含 Ecto Model 的 Phoenix 表单系统 但我遇到了一个无法通过的问题 我创建了一个表格 div class jumbotron div
  • Phoenix 编程:未定义函数 page_path/2

    我的网络应用程序遇到问题 出现以下编译错误 Compilation error on file web controllers auth ex CompileError web controllers auth ex 49 undefine
  • 使用 Elixir 设置日期格式

    我正在尝试将 Timex 模块格式化为某种外观 我正在尝试获取今天的日期 但我希望它的格式如下 2017 12 12 年 月 日 在 ruby 中 我会去 strftime 类 但我不知道如何使用 Elixir 来做到这一点 目前的尝试 T
  • 如何在简单的 Elixir 脚本中加载 Elixir 库?

    在 ruby 脚本中 我可以简单地执行以下操作 require some gem SomeGem do something 我怎样才能在 Elixir 中做类似的事情exs脚本而不创建一个全新的混合项目 到目前为止 我已经在谷歌上搜索了执行
  • Phoenix 框架 - 每个路由的页面标题

    在 Phoenix 框架中 有一种基于路由 路径设置页面标题的常用技术 或者这只是一个调用的问题assign page title fred 在我的路由函数内的正确位置 Update 我最终实现了 michalmuskala 解决方案的变体
  • Elixir 中的小数四舍五入

    我有这个十进制数 Elixir c1 Decimal div a1 b1 gt Decimal lt 0 006453859622556080696687234694 gt 如何将其四舍五入为小数点后位数较少的较短数字 正如 Dogbert
  • 如何在 Elixir 的 Ecto 查询中使用“case-when”?

    我有一个 SQL 查询 例如 SELECT SUM CASE WHEN
  • Elixir 中的斜线符号是什么意思?

    在 Elixir 文档中 他们继续使用带有斜杠的奇怪符号 例如 is boolean 1 IO puts 1 String length 1 is function 2 2 我只是猜测 但我认为它指的是数量 但如果是这样的话 为什么文档中没
  • 如何向 Ecto.DateTime 添加天数?

    我有一个像这样创建的日期时间 Ecto DateTime from erl 2015 3 10 0 0 0 这是一个凤凰应用程序 我想在没有任何额外第三方库的情况下增加几天 如何 至少从 Elixir 1 5 0 开始 您可以使用DateT

随机推荐

  • 从 .Plist 加载数组

    我正在尝试从 Plist 中的数组加载数组 但它不起作用 该 plist 看起来像这样 这是我正在使用的代码 NSString path NSBundle mainBundle pathForResource DiseaseProperty
  • Objective-C 中的属性和实例变量

    我对 Objective C 中的属性和实例变量感到相当困惑 我正在阅读 Aaron Hillegass 的 Mac OS X 的 Cocoa 编程 一切都很合乎逻辑 你可以像这样声明一个类 class Something interfac
  • QWebSocketServer - 不释放内存

    首先 我在安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题 在 Qt Memcheck 中我必须检查 外部错误 看到它 一些字节是肯定输了 指着我的main就在我的地方QCoreApplication ex
  • 如何让 Vim 匹配不以七位数字开头的行?

    我有一个大约 1000 行的文件 除个别行外 所有行均以七位数字开头 我需要捕捉这些行并将它们与前一行实际连接起来 我已经成功地能够使用以下正则表达式模式匹配以七位数字开头的任何行 d 7 我似乎无法让它匹配任何一行不匹配不过 这种模式确实
  • 如何按名称杀死进程? (Win32 API)

    基本上 我有一个将启动多次的程序 因此 该程序将启动两个或多个进程 我想使用 Win32 API 并终止 终止具有特定名称的所有进程 我见过杀死一个进程的例子 但没有看到多个具有完全相同名称 但参数不同 的进程 尝试下面的代码 killPr
  • 如何在 ag-grid 中以编程方式更改“无行显示”文本?

    我最近一直在修补 Ag grid 当我从 REST API 获取一些数据时 我想将 无行显示 文本更改为 数据正在加载 数据以 JSON 对象数组的形式返回 但是 如果 API 确实返回一个空数组 我希望 数据正在加载 文本更改为 无行可显
  • 在 Xcode 6 - Swift 中使用自定义字体 [重复]

    这个问题在这里已经有答案了 我是斯威夫特新手 我想知道如何在 Xcode 6 的 swift 应用程序中使用自定义字体 您只需将字体文件 ttf 拖到 Xcode 左侧窗格的资源区域中即可 当您将其放入时 会出现一个对话框 确保您的应用程序
  • Java中如何确保String对象被销毁?

    我公司的一名员工需要通过我编写的程序修改 SQL Server 数据库中的数据 该程序首先使用 Windows 身份验证 我要求 DBA 授予该特定用户对所述数据库的写入权限 他们不愿意这样做 而是授予了写权限myWindows 用户帐户
  • 如何使用 thymeleaf 和 spring 用列表填充下拉列表

    我需要用字符串列表中的所有值填充下拉列表 控制器类 RequestMapping value generateIds method RequestMethod GET public String launchPage Model model
  • 是否可以使用 Python 读取 FTP 文件而不编写它们?

    我正在尝试使用 Python 的 ftplib 读取文件而不写入它们 大致相当于 def get page url try return urllib urlopen url read except return 但使用FTP I trie
  • 在 MATLAB 图中用值标记点

    以下命令确实用正方形标记了点 但没有在其中放入值 例如 21 0 X 21 8 2 1 0 Y 0 1 2 3 4 plot X Y k s 我应该添加哪个参数以便全部5点值出现在图上吗 这些值不能一一键入 因为它们是随机数 因此它们可能会
  • 打字总是抱怨全局模块

    我对打字稿很陌生 无论我尝试安装什么类型 我都会得到 打字错误 消息 尝试将 Angular 编译为外部模块 但它看起来像全局模块 我只是想做 typings install dt angular 我究竟做错了什么 Update 如果您对此
  • 从类 T 获取函数名 (__func__) 和指向成员函数的指针 void(T::*pmf)()

    是否可以写一些f 接受类型的模板函数T和一个指向签名成员函数的指针void T pmf 作为 模板和 或函数 参数并返回const char 指向成员函数的 func 变量 或损坏的函数名称 EDIT 我被要求解释我的用例 我正在尝试编写一
  • 停止 JavaScript 执行而不锁定浏览器

    您是否能够在不锁定浏览器的情况下停止 JavaScript 执行 通常停止执行的方法是无限执行while loop 但对于 FireFox 它会锁定浏览器 直到循环结束 您对此有何看法 我正在尝试覆盖window confirm 使用 HT
  • 构建服务器上的基础设施组件

    我 继承 了一个新的 旧的 Winforms 项目 并希望将其放到我们的构建服务器 Bamboo 上 该构建服务器只安装了绝对最低限度的版本 NET 3 5 仅此而已 我们希望保持这种状态 第一步 我将 Infragistics 组件的所有
  • JavaScript 在一行中定义并返回一个变量

    在 JavaScript 中 如果我想返回一个变量 但不想修改它或将其泄漏到全局范围中 我可以像这样在一行中定义并返回它吗 return var Foo bar 但是 我认为我在任何地方都没有见过这种情况 我更常见的是 var Foo ba
  • RTC简单ID查询结果404?

    我试图简单地通过 ID 查找 RTC 票证 但它告诉我 404 未找到 也许我应该用一些东西替换 ggTXcJdTEeCznlnpJMXHdQ 或爵士乐或 oslc 或上下文或http purl org dc terms http purl
  • 在EJB3中如何使用JNDI获取新的Stateful Session Bean?

    我正在尝试使用 JNDI 在 servlet 中获取新的有状态会话 Bean 作为局部变量 我的doGet 方法有以下几种 Bean bean Bean new InitialContext lookup beanName 我尝试过包括ja
  • 获取当前范围内所有定义的变量

    我正在解析一个包含以下内容的网站 hmapId 7 42500000000626135 hmapStartInterv 7 750 hmapEndInterv 7 846 hmapUrlInterv 7 some url hmapNameI
  • Phoenix 编程:未定义函数 page_path/2

    我的网络应用程序遇到问题 出现以下编译错误 Compilation error on file web controllers auth ex CompileError web controllers auth ex 49 undefine