Эликсир: ошибка Nebulex (библиотека кэширования) - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в Elixir, пытаюсь использовать Nebulex для создания простого локального кэша (Panda.Cache).Я следовал его учебнику , но, наконец, выполнив следующие команды:

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 - это имя моего эликсираapp и 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

кеш.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 голосов

Согласно вашему коду в 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) запускается как часть вашего дерева наблюдения. Дайте мне знать, если это работает для вас.

0 голосов
/ 25 апреля 2018

Я попробовал код, который вы разместили, но я не могу воспроизвести ошибку.

Когда происходит что-то подобное, я часто делаю следующее:

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

и затем пытаюсь повторить попытку.

Надеюсь, это поможет:)

...