首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在混合任务中使用`Phoenix.Token`时出错

问尝试在混合任务中使用`Phoenix.Token`时出错
EN

Stack Overflow用户
提问于 2017-07-22 03:50:17
回答 1查看 142关注 0票数 0

我有一个Phoenix应用程序,它使用Phoenix.Token对令牌进行签名和验证。

这在应用程序本身中运行良好,但在尝试从混合任务中使用Phoenix.Token时,我得到了一个奇怪的错误。

下面是一个最小的例子:

代码语言:javascript
复制
defmodule Mix.Tasks.SignSomething do
  use Mix.Task
  alias MyApp.Endpoint

  @shortdoc "sign something"

  def run(_args) do
    IO.inspect Phoenix.Token.sign(Endpoint, "key", "val")
  end
end

当我运行此任务时,我看到:

代码语言:javascript
复制
** (ArgumentError) argument error
    (stdlib) :ets.lookup(MyApp.Endpoint, :secret_key_base)
    lib/phoenix/endpoint.ex:505: Mealthy.Web.Endpoint.config/2
    (phoenix) lib/phoenix/token.ex:201: Phoenix.Token.get_endpoint_key_base/1

这似乎意味着我还没有配置:secret_key_base,但事实并非如此;它在config.exs中,如果我在配置它之后直接使用IO.puts,我会看到该输出。

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-07-22 03:50:17

启动应用程序

MichałMuskała在《万金油松弛》中为我回答了这个问题。他说:

未启动ets表,因为端点未启动

ets参数错误非常烦人:(

正如他指出的,一种解决方案是这样启动应用程序:

代码语言:javascript
复制
Mix.Task.run("app.start")

因此任务就变成了:

代码语言:javascript
复制
defmodule Mix.Tasks.SignSomething do
  use Mix.Task
  alias MyApp.Endpoint

  @shortdoc "sign something"

  def run(_args) do
    Mix.Task.run("app.start") # added this
    IO.inspect Phoenix.Token.sign(Endpoint, "key", "val")
  end
end

应用程序启动后,任务可以调用依赖于Phoenix.Token函数的其他函数。

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

https://stackoverflow.com/questions/45245678

复制
相关文章

相似问题

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