Ich bin neu in Elixier und OTP.Wie kann ich ein Modul von OTP in mein Mix-Projekt integrieren?
Ich möchte GenServer.Behaviour
für meinen Server verwenden, aber aus einigen Gründen Elixier kann es nicht finden. Ich habe eine Mischung Projekt erstellt, aber wenn ich mix compile
geben bekomme ich folgende Fehler
== Übersetzungsfehler auf Datei lib/lecture3.ex == ** (CompileError) lib/lecture3.ex: 2: Modul GenServer.Behaviour nicht geladen und konnte nicht (Elixier) Expandieren Makro zu finden: Kernel.use/1 lib/lecture3.ex: 2: Cache (Modul)
ich denke, ich habe die einschließen Modul, aber wie?
mix.exs:
defmodule LECTURE3.Mixfile do
use Mix.Project
def project do
[app: :lecture3,
version: "0.1.0",
elixir: "~> 1.3",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
deps: deps()]
end
def application do
[applications: [:logger]]
end
defp deps do
[]
end
end
lecture3.ex:
defmodule Cache do
use GenServer.Behaviour
def handle_cast({:put, url, page}, {pages, size}) do
new_pages = Dict.put(pages, url, page)
new_size = size + byte_size(page)
{:noreply, {new_pages, new_size}}
end
def handle_call({:get, url}, _from, {pages, size}) do
{:reply, pages[url], {pages, size}}
end
def handle_call({:size}, _from, {pages, size}) do
{:reply, size, {pages, size}}
end
def start_link do
:gen_server.start_link({:local,:cache}, __MODULE__, {HashDict.new, 0}, [])
end
def put(url, page) do
:gen_server.cast(:cache, {:put, url, page})
end
def get(url) do
:gen_server.call(:cache, {:get, url})
end
def size do
:gen_server.call(:cache, {:size})
end
end
defmodule CacheSupervisor do
def init(_args) do
workers = [worker(Cache, [])]
supervise(workers, strategy: :one_for_one)
end
def start_link(domain) do
:supervisor.start_link(__MODULE__, [domain])
end
end
Enum.map(["de","edu", "com" ,"it"], fn(x)-> CacheSupervisor.start_link(x)
end)
Danke, dass geholfen hat. Ich werde deine Antwort später akzeptieren –