Elixir:Nebulex(缓存库)错误

时间:2018-04-24 22:59:52

标签: caching erlang elixir

我是Elixir的新手,尝试使用Nebulex制作一个简单的本地缓存(Panda.Cache)。我跟着its tutorial,但最后,通过执行以下命令:

data = %{id: 1, text: "hello"}
Mycache.set(data[:id], data)

我收到此错误:

** (ArgumentError) argument error
    (stdlib) :ets.lookup_element(Panda.Cache, :metadata, 2)
    (nebulex) lib/nebulex/adapters/local/metadata.ex:19: Nebulex.Adapters.Local.Metadata.get/1
    (nebulex) lib/nebulex/adapters/local.ex:177: Nebulex.Adapters.Local.set/4
    (panda) lib/panda/cache.ex:2: Panda.Cache.execute/2

Panda是我的Elixir应用程序的名称,Panda.Cache是我正在尝试制作的缓存的名称。

任何帮助或解决方案将不胜感激。提前谢谢。

更新

项目文件夹和文件类似于:

panda
    config
       config.exs
    lib
       panda.ex
       panda
           application.ex
           cache.ex

config.exs文件:

use Mix.Config

config :panda, Panda.Cache,
  adapter: Nebulex.Adapters.Local,
  gc_interval: 86_400 # 24 hrs

cache.ex文件:

defmodule Panda.Cache do
  use Nebulex.Cache, otp_app: :panda
end

application.ex文件:

defmodule Panda.Application do
  use Application

  def start(_type, _args) do
    import Supervisor.Spec

    children = [
      supervisor(Panda.Cache, [])
    ]

    opts = [strategy: :one_for_one, name: Panda.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

而且,我是如何尝试在代码中使用缓存的:

defmodule Panda do


  def mytest do
    data = %{id: 1, text: "hello"}

    Panda.Cache.set(data[:id], data)
  end

end

2 个答案:

答案 0 :(得分:1)

根据您在GitHub中的代码(https://github.com/ab00zar/FirstElixirCode),在mix.exs文件中您缺少应用模块,目前它是这样的:

def application do
  [
    extra_applications: [:logger]
  ]
end

但它应该是这样的:

def application do
  [
    extra_applications: [:logger],
    mod: {Panda.Application, []}
  ]
end

因此,您的应用程序(和监督树)没有启动,缓存(Nebulex)作为监督树的一部分启动。如果这对您有用,请告诉我。

答案 1 :(得分:0)

我尝试了您发布的代码,但我无法复制错误。

当发生类似这样的事情时,我经常会这样做:

mix deps.clean --all
mix clean
mix deps.get
mix deps.compile
mix compile

然后我再试一次。

我希望这会有所帮助:)