2016-03-15 87 views
1

配置多个回购,我尝试使用Ecto配置在我的药剂应用的两个回购。
我需要帮助配置它们,所以它们都与一个one_for_one战略独立监督;我认为这是正确的,并使用它们将重新启动在药剂应用

回购-A和回购-B将意味着过程

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 
+1

我不认为这个问题是关系到外生的,是不是叫'工人的结果(任务,[MyAppModule,:work,[]],重启:: temporary),两次? – Gazler

+0

@Gazler - 是的,同意不与外生的问题 - 它只是我的小白使用:)我不知道如何配置主管和工人两个回购协议 - 我敢肯定,我贴的代码是错误的... –

回答

4

您的id ARG添加到opts关键字列表,例如:

worker(Task, [MyAppModule, :work, []], restart: :temporary, id: :my_app_module_1) 
+0

杰森 - 感谢输入,寿我没有这个标记为正确的答案,因为虽然它确实让我们定义的Id它不允许被注册的独立两个雷克托模块;第二个回购不可用。道歉,如果问题不清楚,但问题的确从配置两个回购问题开始。 –

+0

我显然没有完全遵循完整的问题。抱歉。你提供的错误输出似乎指向'id'是问题。 –