Я пытаюсь настроить два репозитория в своем приложении Elixir, используя Ecto.
Мне нужна помощь, чтобы настроить их так, чтобы они оба контролировались независимо друг от друга с помощью стратегии «один за одного»; Я предполагаю, что это правильно и будет означать, что процессы, использующие их, будут перезапущены.
Репо-А и Репо-Б
Настройка mix.exs:
def application do
[applications: [:logger, :tds, :tds_ecto, :ecto, :httpoison, :csvlixir],
mod: {MyApp, []}]
end
MyApp_app.ex
Фрагмент ниже:
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
supervisor(MyApp.Repo-A, []),
worker(Task, [MyAppModule, :work, []], restart: :temporary),
supervisor(MyApp.Repo-B, []),
worker(Task, [MyAppModule, :work, []], restart: :temporary)
]
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
end
defmodule Repo-A do
use Ecto.Repo, otp_app: :myapp
end
defmodule Repo-B do
use Ecto.Repo, otp_app: :myapp
end
Когда я mix run
получаю следующее: я не знаю, как правильно определить id.
** (Mix) Could not start application myapp: exited in: MyApp.start(:normal, [])
** (EXIT) an exception was raised:
** (ArgumentError) duplicated id Task found in the supervisor specification, please explicitly pass the :id option when defining this worker/supervisor
worker(Task, [MyAppModule, :work, []], restart: :temporary),
? - person Gazler   schedule 15.03.2016