我是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
答案 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
然后我再试一次。
我希望这会有所帮助:)