我第一次致力于实现一个主管,我遇到了一些我从文档中找不到的问题。具体来说,当我试图使用SlowRamp.flood启动我的进程时,我就得到了{:error, {:invalid_child_spec, []}}。
这是一个非常简单的应用程序,是使用混合新slow_ramp -sup制作的.
./lib/slow_ramp.ex中的主要文件是:
defmodule SlowRamp do
use Application
# See http://elixir-lang.org/docs/stable/elixir/Application.html
# for more inform
我正在尝试启动一个主管程序和一个GenServer:
defmodule SubscriptionManagerSupervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, [], [{:name, __MODULE__}])
end
# supervisor callback
def init([]) do
interval = 1000
children = worker(SubscriptionManagerServer, [interval
我想从我的凤凰应用程序连接到Redis,但无法连接。
我正在使用菲尼克斯v1.3.0。我安装了Redix软件包。在lib/myapp.ex中,我有以下代码
defmodule myapp do
use Application
# See http://elixir-lang.org/docs/stable/elixir/Application.html
# for more information on OTP Applications
def start(_type, _args) do
import Supervisor.Spec
# Get all c
我正在尝试使用tortoise连接到mqtt。当我的连接掉线时,它没有问题地连接,但是当我的应用程序退出时,它不会根据:one_to_one策略重新启动。我在mod of mix.exs中开始了应用程序。我应该把它交给主管并启动吗?它要求start没有任何参数,什么是实现这一目标的正确方法。如果我的应用程序崩溃了呢?我的connection.ex必须是genserver吗?请建议一下。
mix.exs
defmodule SslMqtt.MixProject do
use Mix.Project
def project do
[
app: :ssl_mqtt,
我真的很纠结于灵丹妙药的管理者,并弄清楚如何命名他们,以便我可以使用他们。基本上,我只是尝试启动一个受监督的Task,我可以发送消息给它。
因此,我有以下几点:
defmodule Run.Command do
def start_link do
Task.start_link(fn ->
receive do
{:run, cmd} -> System.cmd(cmd, [])
end
end)
end
end
项目入口点为:
defmodule Run do
use Application
# See h
我想使用:瞬态重启策略来监督一个任务,这样它只有在异常退出时才会被重启。然而,当我测试我的应用程序时,我发现它重新启动了4次,直到supervisor自动退出。我简化了代码,甚至将重新启动更改为:临时,但即使这样,主管仍在重新启动任务。
简化示例:
defmodule FooSup do
use Supervisor
def start_link() do
IO.puts "starting #{__MODULE__}"
Supervisor.start_link(__MODULE__, {})
end
def init(_)do
c
我正在测试节点间函数调用(rpc),如下所示:
defmodule RpcTest do
def run do
Task.Supervisor.async( {DBServer.DistSupervisor, :'dbserver@hostname'}, fn -> "test" end)
|> Task.await
|> IO.inspect
end
end
然后运行dbserver节点,在dbserver中调用Task.Supervisor.start_link(name: DBServer.DistSu
我正在尝试从Supervisor升级到DynamicSupervisor。 我有一个简单的主管, use Supervisor
alias EvercamMedia.Snapshot.Worker
def start_link() do
Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
children = [worker(Worker, [], restart: :permanent)]
supervise(children, strat
在使用Python几个月之后,我正在编写Elixir代码,而我对惯用药剂的记忆是模糊的。
此代码适用于:
# Define workers and child supervisors to be supervised
children = [
# Start the Ecto repository
supervisor(Ssauction.Repo, []),
# Start the endpoint when the application starts
supervisor(SsauctionWeb.Endpoint, []),
supervisor(Absinthe
最近,我已经开始学习Elixir,但是在实现部分我有点挣扎。我想我确实理解了主管和孩子的概念,但我不太习惯函数式编程。你能给我一个这样一个场景的实现例子吗:
根主管监督进程A和B。B也是其他一些过程的监督者。A应该不断地将消息传递给B,而B应该能够将这些消息传递给它的子级。此外,B的子级应该能够将消息传递回B。A和B应该不断地运行。
给出最简单的实现此类场景的例子,或者给我一些线索,说明如何实现父-子、子-子之间的消息传递。考虑到我在这个项目中使用mix。另外,A和B应该使用GenServer
例如,让我们假设在根主管内部有类似的东西,但现在我不知道如何将消息从A传递到B。
use S
当您使用Mix创建应用程序时,它总是向项目添加根管理文件。注意监督函数中的“子规范”数组是如何为空的。
app.ex:
defmodule App.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(args) do
supervise([], [strategy: :one_for_one])
end
end
还为您创建了应用程序的入口点。通过我在网上找到的一些例子,我写了以
所以我很难遵循这个“超级简单”的例子。新的药剂(主要来自Ruby背景)。
只是尝试在主应用程序监控树下创建一个redis连接池,以便用于活动用户会话,但实际上,redis在行后会更有用,所以我试图正确地完成这个设置。
This line:
start: {Supervisor, :start_link, [children_redix]}
Gives me the following error:
** (Mix) Could not start application gametime:
Gametime.Application.start(:normal, []) returned
我正在跟踪一本菲尼克斯的书,并构建一个代理来使用上面的几个后端:
# Proxy
defmodule Rumbl.InfoSys do
# we will have several backends; wolfram, google search, google pictures, etc
@backends [Rumbl.InfoSys.WolFram]
defmodule Result do
defstruct score: 0, text: nil, url: nil, backend: nil
end
def start_link(backend, qu
我是全新的灵丹妙药,当一个构建决定不构建时,我很难找到问题。
所以我试图在这个的基础上使用这个
我遇到的问题之一是,我不断地遇到这样的问题:
** (Mix) Could not start application reph: Reph.start(:normal, []) returned an error: shutdown: failed to start child: Reph.ReactIO
** (EXIT) an exception was raised:
** (ArgumentError) expected :name option to be one
我对一些OTP概念还不熟悉。我有GenServer,它会将事件发布到RabbitMQ。这个GenServer的状态是:amqp Chanel,它在init()期间启动一次,并且在cast调用之间持久。 defmodule Myapp.Events.AmqpTransport do
require Logger
use GenServer
use AMQP
def start_link(_) do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def init(_opts) do