对于在PostgreSQL中使用继承经验的人:是否值得使用它,或者最好不要使用它?你会在哪种情况下使用它?
说实话,我不完全理解关系模型和OO模型之间的区别......
所有!是否可以在Linux下的Erlang shell中配置Home,End,Del键.
在我按Home的那一刻,它产生'H',当结束 - 'F'时......
我用分布式的erlang应用程序付款.
配置和想法来自:
http:/www.erlang.org/doc/pdf/otp-system-documentation.pdf 9.9.分布式应用
配置文件:
[{kernel,
[{distributed,[{wd,5000,['n1@a2-X201',{'n2@a2-X201','n3@a2-X201'}]}]},
{sync_nodes_mandatory,['n2@a2-X201','n3@a2-X201']},
{sync_nodes_timeout,5000}
]}
,{sasl, [
%% All reports go to this file
{sasl_error_logger,{file,"/tmp/wd_n1.log"}}
]
}].
[{kernel,
[{distributed,[{wd,5000,['n1@a2-X201',{'n2@a2-X201','n3@a2-X201'}]}]},
{sync_nodes_mandatory,['n1@a2-X201','n3@a2-X201']},
{sync_nodes_timeout,5000}
]
}
,{sasl, [
%% All reports go to this file
{sasl_error_logger,{file,"/tmp/wd_n2.log"}}
]
}].
现在在3个独立的终端启动erlang:
我希望有2个独立的erlang节点可以相互通信:
所以节点a@myhost将能够发送消息b@myhost.
是否有限制节点的任何方式a@myhost,所以只能从一个功能secure_module可以叫上b@myhost?
它应该是这样的:
a@myhost> rpc:call(b@myhost,secure_module,do,[A,B,C]) returns {ok,Result}
Run Code Online (Sandbox Code Playgroud)
和所有其他电话
a@myhost> rpc:call(b@myhost,Modue,Func,Args) return {error, Reason}
Run Code Online (Sandbox Code Playgroud)
其中一个选择是使用ZeroMQ库来建立节点之间的通信,但是如果可以使用一些标准的Erlang函数/模块来完成它会更好吗?
我必须在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 文档,可以仅为文件配置记录器:
修改默认处理程序以打印到文件而不是 standard_io:
[{kernel,
[{logger,
[{handler, default, logger_std_h, % {handler, HandlerId, Module,Config}
#{config => #{file => "log/erlang.log"}}}
]}]}].
Run Code Online (Sandbox Code Playgroud)
我的配置文件看起来像:
[{kernel,[
{logger_level, error},
{logger,
[{handler, default, logger_std_h,
#{config => #{file => "log/erlang.log"}}}
]
}
]}].
Run Code Online (Sandbox Code Playgroud)
io 与文档中的完全相同。日志级别设置为错误
当我使用reabar3 shell统计应用程序时,打印到控制台:
===> The rebar3 shell is a development tool; to deploy applications in production, consider using releases (http://www.rebar3.org/docs/releases)
2019-04-10T15:14:33.363287+02:00 info: application: syntax_tools, started_at: 'node@x201'
2019-04-10T15:14:33.371897+02:00 info: application: compiler, started_at: 'node@x201'
2019-04-10T15:14:33.379962+02:00 info: supervisor: {local,gr_sup}, started: …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的模块:
-module(check).
-export([check/0]).
check() ->
Val = 1,
io:format("Value = ~p~n",[Val]).
Run Code Online (Sandbox Code Playgroud)
编译的代码erlc.现在让我们运行Erlang:
Erlang R14B (erts-5.8.1) [source] [smp:4:4] [rq:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.8.1 (abort with ^G)
1> check:check().
Value = 1
ok
Run Code Online (Sandbox Code Playgroud)
如果我修改代码,将Val更改为2,并使用erlc,我希望check:check将返回2,但事实并非如此:
2> check:check().
Value = 1
ok
Run Code Online (Sandbox Code Playgroud)
我们得到相同的结果.即使我重新启动shell.
如何在不杀死虚拟机的情况下强制Erlang重新加载模块?