小编Pee*_*ger的帖子

如何在调试时读取/解码Erlang中列表解析的临时函数名称

当调试foo具有列表推导的模块(例如)临时函数名称时,例如

foo:'-loop/4-lc$^2/1-3-'
Run Code Online (Sandbox Code Playgroud)

可以在跟踪输出或错误消息中找到.如果许多列表推导在一个模块中,通常很难找出哪一个正在运行.

如何解释函数名称?

这些函数的调用参数有什么意义?

返回值的含义是什么?

debugging erlang list-comprehension

6
推荐指数
1
解决办法
315
查看次数

从shell命令通知本地erlang节点的最简单方法

我正在运行一个分布式的erlang系统,每台机器有一个节点.

由于DNS不可用,我都用相同的-sname参数启动它们,例如

erl -sname foo ...
Run Code Online (Sandbox Code Playgroud)

操作系统守护程序具有在/bin/sh发生特定事件时(当USB棒被拖入系统时)执行shell()命令的功能.

我正在寻找一种简单的方法来使用这个shell命令在本机的本地erlang节点上调用一个函数(在检测到并安装了USB记忆棒后采取进一步的操作).

我正在考虑erl -sname bar从shell 调用并运行一些看起来像的代码

[_,Host] = string:tokens(atom_to_list(node()), "@"),
The_node = list_to_atom("foo@" ++ Host),
spawn(The_node, My_fun),
Run Code Online (Sandbox Code Playgroud)

这是要走的路吗?或者是开始一个全新的erlang节点过度杀戮(虽然不会经常这样做)

或者更好地谈论gen_tcp打开的套接字,或者读取命名管道.

还是其他任何建议?

BTW这是在Unix系统上运行的.

erlang distributed sh

5
推荐指数
1
解决办法
536
查看次数

Erlang:创建filewatcher

我必须在Erlang中实现文件监视器功能:应该有一个进程列出文件,如果特定目录,并在文件出现时执行某些操作.

我看看OTP.所以目前我有以下想法:1.创建将控制gen_servers的Supervisor(每个文件夹一个服务器)2.为我想要监视的每个文件夹创建WatchServer - gen_server.3.创建ProcessFileServer - 应该对文件执行某些操作的gen服务器)假设复制到不同的folder =

所以第一个问题:WatchServer不应该等待请求,它应该在预定义的时间间隔内生成一个.

目前我在init/1函数中创建了一个计时器,并在handle_info函数中处理on_timer事件.

现在问题:1.有更好的想法吗?2.如何通知ProcessFileServer找到的文件?它对我来说,单独创建WatchServers和ProcessServers会更方便,但在这种情况下我不知道向谁发送消息?

可能有一些类似的项目/库可用吗?

erlang

5
推荐指数
1
解决办法
2754
查看次数

Erlang gen_server转换错误的返回值

我尝试将消息转发给gen_server:

 gen_server:cast({global, ID}, {watchers}).
Run Code Online (Sandbox Code Playgroud)

处理程序是:

handle_cast({watchers}, State) ->
    case State#table_state.watchers of
    [] ->
        {reply, no_watchers, State};
    _ ->
        {reply, State#table_state.watchers, State}
    end;
Run Code Online (Sandbox Code Playgroud)

但是当我执行gen_server:castgen_server时会终止并出现错误:

=ERROR REPORT==== 29-Apr-2011::18:26:07 ===
** Generic server 1 terminating 
** Last message in was {'$gen_cast',{watchers}}
** When Server state == {table_state,1,"1",11,[]}
** Reason for termination == 
** {bad_return_value,{reply, no_watchers, {table_state,3,"3",11,[]}}}
Run Code Online (Sandbox Code Playgroud)

我为什么要这样bad_return_value

erlang gen-server

5
推荐指数
1
解决办法
5567
查看次数

为什么 ets 表可以在 ct:init_per_testcase 中幸存下来,但在 init_per_suite 中不行?

我有一个通用的测试套件,它尝试创建一个 ets 表以用于所有套件和所有测试用例。它看起来像这样:

-module(an_example_SUITE).
-include_lib("common_test/include/ct.hrl").

-compile(export_all).

all() -> [ets_tests].

init_per_suite(Config) ->
    TabId = ets:new(conns, [set]),
    ets:insert(TabId, {foo, 2131}),
    [{table,TabId} | Config].

end_per_suite(Config) ->
    ets:delete(?config(table, Config)).

ets_tests(Config) ->
    TabId = ?config(table, Config),
    [{foo, 2131}] = ets:lookup(TabId, foo).
Run Code Online (Sandbox Code Playgroud)

ets_tests函数因 badarg而失败。创建/销毁每个测试用例的 ets 表,如下所示:

-module(an_example_SUITE).
-include_lib("common_test/include/ct.hrl").

-compile(export_all).

all() -> [ets_tests].

init_per_testcase(Config) ->
    TabId = ets:new(conns, [set]),
    ets:insert(TabId, {foo, 2131}),
    [{table,TabId} | Config].

end_per_testcase(Config) ->
    ets:delete(?config(table, Config)).

ets_tests(Config) ->
    TabId = ?config(table, Config),
    [{foo, 2131}] = ets:lookup(TabId, foo).
Run Code Online (Sandbox Code Playgroud)

运行这个,我发现它运行得很好。

我对这种行为感到困惑,无法确定为什么会发生这种情况,形成docs …

testing erlang common-test

5
推荐指数
1
解决办法
583
查看次数

Elixir:用于监督过程的invalid_child_spec.无法弄清楚为什么

我正在努力第一次实现一个主管,我遇到了一些我无法从文档中找到的问题.具体来说,当我尝试使用SlowRamp.flood我开始我的过程{:error, {:invalid_child_spec, []}}.

这是一个非常简单的应用程序,使用mix new slow_ramp --sup.

主要文件./lib/slow_ramp.ex是:

defmodule SlowRamp 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, warn: false

    children = [
      worker(SlowRamp.Flood, [])
    ]

    # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
    # for other strategies and supported options
    opts = [strategy: :one_for_one, name: SlowRamp.Supervisor]
    Supervisor.start_link(children, opts)
  end

  def flood do
    Supervisor.start_child(SlowRamp.Supervisor, [])
  end
end
Run Code Online (Sandbox Code Playgroud)

我的子函数/文件在./lib/SlowRamp/flood.ex,看起来像这样:

defmodule SlowRamp.Flood do
  def start_link do
    Task.start_link(fn -> …
Run Code Online (Sandbox Code Playgroud)

elixir erlang-otp

5
推荐指数
1
解决办法
1304
查看次数

与Elixir/Erlang同步执行Shell命令

我想执行一个(慢)python脚本,我希望我的Elixir进程阻塞,直到它收到脚本的所有输出.

是Elixir的System.cmd/3还是Erlang的os:cmd/1保证同步?如果没有,是否有其他方式进行同步操作系统调用?

elixir

5
推荐指数
1
解决办法
789
查看次数

为什么Elixir消息传递时间与消息大小成正比?

我发现在Elixir中传递消息所花费的时间与消息的大小成正比,而我预计它会相对恒定.由于数据结构是不可变的,因此运行时应该能够通过引用(在恒定时间内)在进程之间传递大型结构.考虑以下测试.

use Bitwise

defmodule PerfTask do
  def pack(s) do
    {millis, packed} = :timer.tc(fn -> Enum.to_list(s) end)
    IO.puts("packed in #{millis} millis")
    Task.async(fn -> packed end)    
  end

  def unpack(t) do
    {millis, unpacked} = :timer.tc(fn -> Task.await(t) end)
    IO.puts("unpacked in #{millis} millis")
    unpacked
  end

  def go(n) do
    IO.puts "n = #{n}"
    1..n |> pack |> unpack
  end
end

PerfTask.go(1 <<< 20)
Run Code Online (Sandbox Code Playgroud)

在列表中有2 ^ 20个元素,打印出来

n = 1048576
packed in 106481 millis
unpacked in 9916 millis
Run Code Online (Sandbox Code Playgroud)

构建列表需要大约10倍的时间才能将其排除在外Task.(请注意,列表是在任务启动之前构建的.所有任务都要返回已经构建的列表.)

在列表中有2 ^ 22个元素,它会打印出来

n = …
Run Code Online (Sandbox Code Playgroud)

performance elixir

5
推荐指数
1
解决办法
306
查看次数

elixir - phoenix:undefined function Hex.SCM.managers

当runnig

mix phoenix.server
undefined function Hex.SCM.managers/1
Run Code Online (Sandbox Code Playgroud)

正在回归 有人知道我应该安装哪个包吗?Elixir的版本为1.2.3,Erlang/OTP 18提前感谢您

elixir phoenix-framework

5
推荐指数
1
解决办法
157
查看次数

用phoenix服务HTTP范围请求?

我目前正在使用phoenix开发一个网站,并有一个应在后台播放的视频部分。

尽管它在Chrome和Firefox上运行良好,但在Safari上却无法运行。

我怀疑这是因为牛仔没有正确提供HTTP范围请求。

有没有一种方法可以启用(如果默认情况下禁用)?

$ curl -H Range:bytes=16- -I http://localhost:4000/videos/vid_home_1.mp4
HTTP/1.1 200 OK
server: Cowboy
date: Tue, 12 Apr 2016 14:41:20 GMT
content-length: 633787
cache-control: public
etag: 480A03F
content-type: video/mp4
Run Code Online (Sandbox Code Playgroud)

nginx服务器显示为206时:

$ curl -H Range:bytes=16- -I http://localhost/videos/vid_home_1.mp4
HTTP/1.1 206 Partial Content
Server: nginx/1.8.0
Date: Tue, 12 Apr 2016 14:46:17 GMT
Content-Type: video/mp4
Content-Length: 633771
Last-Modified: Mon, 11 Apr 2016 12:26:26 GMT
Connection: keep-alive
ETag: "570b97f2-9abbb"
Content-Range: bytes 16-633786/633787
Run Code Online (Sandbox Code Playgroud)

elixir cowboy phoenix-framework

5
推荐指数
1
解决办法
645
查看次数