Stack Overflow 社区您好,
我们有一个在 Erlang 20 上完美运行的 Erlang 项目,但在尝试使用 Erlang 24 运行它时遇到了问题。我们已经审查了这些版本之间的更改,但我们正在努力查明问题的确切原因问题。
我们的项目可以在这个公共 GitHub 存储库中找到: https://github.com/omayerg/Traffic-Management-System-in-Erlang/tree/main
我们怀疑问题出在通信初始化中,我们就是这样做的:
start_link() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
start() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
start(NODE1,NODE2,NODE3,NODE4,Master) -> gen_server:start_link({local, ?SERVER}, ?MODULE, [NODE1,NODE2,NODE3,NODE4,Master], []).
这是我们迄今为止尝试过的:
编译:我们已经在 Erlang 20 和 Erlang 24 中成功编译了代码,没有任何错误。
日志:不幸的是,日志没有提供对该问题的深入了解。该应用程序在 Erlang 24 中启动,但某些功能无法按预期工作,这与 Erlang 20 不同。
差异:我们比较了 Erlang 24 的发行说明和文档,但我们尚未发现任何直接影响我们项目的具体更改。
我能够在 Erlang 24 下运行它。我需要做的唯一更改是
src/header.hrl
:节点名称是硬编码的,包括 IP 地址。我把它改为:
-define(Master,'[email protected]').
-define(NODE1, '[email protected]').
-define(NODE2, '[email protected]').
-define(NODE3, '[email protected]').
-define(NODE4, '[email protected]').
然后我用
erl -name [email protected]
等启动每个节点,并重新编译代码。
请注意,节点名称区分大小写:如果您使用
[email protected]
等,则需要确保 header.hrl
中的名称匹配。