问题标签 [rebar3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - 如何将新的 Erlang 应用程序添加到 Rebar3 伞形项目?
我在文档中找不到它(或者,更可能的是,我错过了它),所以我认为这些是步骤:
将现有的 Erlang 应用程序(或创建一个新的
rebar3 new app
)复制到<umbrella_root>/apps/
(或<umbrella_root>/libs/
将新应用添加到以下
relx
部分<umbrella_root>/rebar.config
:将新应用所需的配置环境变量添加到
<umbrella_root>/config/sys.config
.如果新应用使用插件,请在
<umbrella_root>/apps/<new_app>/rebar.config
.
我接近了吗?如果是,这是否意味着伞形应用程序可以嵌套?(这可能应该是一个单独的问题)。
erlang - Rebar3:如何从 erlang 引用库的源工件?
我有一个带有工件的库:src/lib/prelude.kind
我想访问它。但是,当我从另一个项目(将库设置为依赖项)调用库代码时,该文件src/lib/prelude.kind
不存在。
我可以通过硬编码文件位置来解决这个问题_build/default/lib/kind/src/prelude.kind
,但我宁愿不硬编码 Rebar3default
配置文件路径。
有没有办法_build/default/lib
在 Rebar3 项目中引用 Erlang 或任何当前配置文件位置?
erlang - 使用 rebar3 编译一个文件的工作流程是什么?
rebar3
似乎每次都重新编译所有内容。
通常我只修改一个文件。那是我要重新编译的文件,我知道其他一切都很好。
这样做的工作流程是什么?理想情况下,我可以从 Erlang shell 中做到这一点。Rebar3 已经知道我的包含路径和包含其中的梁的构建目录,我如何利用 Rebar 的知识,所以我不必再次将其全部输入到 shell 中作为参数c(File, Opts)
?
erlang - 将系统划分为 OTP 应用程序时将全局 gen_server 放在哪里?
TL;博士
如果 OTP 应用程序 A 在应用程序 B 中调用全局注册的 gen_server,并且我不想在不运行它的节点上安装所有应用程序 B,我该如何处理 gen_servers 客户端代码?
背景(略微简化)
我有一个使用分布式 erlang 的系统,2 个具有不同目的的节点,运行大部分不同的代码。到目前为止,我一直在使用手工制作的 Makefile 并在两个节点上安装了所有软件。一些代码作为 OTP 应用程序与主管一起运行,但它没有系统地完成,因此并非所有模块都列在适当监督树的一部分的任何应用程序文件中。
在每个节点上运行的代码的依赖关系非常不同,我想将其划分为 OTP 应用程序(每个节点一个),以构建版本并分别安装它们。我希望这能让我放弃手工制作的 Makefile 并切换到 rebar3。
一个节点在所有 erlang 中运行一个中央服务器,它具有与另一个节点无关的依赖项(牛仔)。另一个节点运行一个使用服务器的客户端程序,但也使用服务器节点不需要的不同端口程序和 gui 库。
问题
客户端与服务器交互的方式是对全局注册的 gen_server 的客户端 API 进行常规函数调用。即在服务器节点上运行的gen_server,在同一个模块中具有它的客户端功能。这意味着这个 gen_servers 光束文件需要存在于两个节点中,但它应该只是其中一个应用程序中监督树的一部分。
此 gen_server 中的服务器端代码使用仅在服务器节点中需要的其他模块,因此 gen_server 的测试代码也依赖于这些其他模块。(我意识到这可以通过在测试中进行适当的模拟来解决。)
我考虑了哪些解决方案?
将其放入库应用程序中
我可以将 gen_servers 代码放在其他两个都依赖的库应用程序中。出于几个原因,这会很奇怪。
- gen_server 模块不会与它所依赖的其他模块属于同一应用程序的一部分(并且与代码中的实际依赖关系相比,应用程序级别的依赖关系将被颠倒)。
- 测试代码要么需要保留在服务器应用程序中(与它测试的代码不同的应用程序),要么重新工作以不依赖于周围的模块(这很好但很耗时)。
在两个版本中包含服务器应用程序
我可以在两个节点中都包含服务器应用程序,并让主管代码检查它是否应该基于 init-arguments 或节点名称实际启动任何内容。但这会破坏我正在尝试做的事情的目的。
在两个应用程序中包含 gen_server 模块
我也可以使用符号链接或其他东西在客户端应用程序中包含 gen_server 模块。我想它会起作用,但感觉很脏。
将 gen_server 模块拆分为客户端模块和服务器模块
然后客户端模块可以放在客户端应用程序中(或者如果该服务器的某些部分也使用它,则放在一个库中)。它会大大偏离 gen_severs 通常的编写方式。
erlang - Erlang / Rebar3 - 如何添加应用程序以发布但不启动它?
我有一个伞形项目,包括 main_app、app1、app2。main_app 可以单独工作,也可以与 app1 和 app2 一起工作和管理。
关于启动 app1 和 app2 的决定在外部(特殊配置文件,由用户填写)。
我使用 rebar.config,它的一部分:
如果我使用sudo rebar3 shell
- 我可以管理 app1 和 app2。但是,如果我打包发布sudo rebar3 as prod tar
- 我会得到一个 tar 存档,其中不包含 app1 和 app2 的梁文件。我知道,如果我将 app1 和 app2 放入列表中的发布部分kernel, sasl, main_app
- 我需要的应用程序将被添加到发布中,但它们会自动启动(我需要自己启动)!
如何配置 rebar 以将所有库或应用程序添加到 tar 版本,但在启动 main_app 期间不启动它们?
提前致谢!
erlang - 如何使用 Rebar3 从我的本地文件系统添加依赖项?
我有两个 Erlang 应用程序:单个应用程序mylogger
和伞式应用程序myapp
。
我想包含一个当前版本mylogger
的myapp
.
Rebar3 只建议从 git 添加 deps
或来自 hex.pm。
如何从具有 rebar3 结构的文件系统添加我的自定义应用程序?
macos - 使用 leveldb 构建 erlang 项目时出错
运行以下命令时出现 leveldb 错误。
./rebar3 外壳
erlang - 我们可以在 EMQ X Broker 中使用 Elixir 插件吗?
EMQ X 可以根据https://github.com/emqx/emqx-rel#build-with-elixir-plugins使用基于 Elixir 的插件进行构建。但是,它没有编译并抛出以下错误
和rebar.config
最新emqx-rel
的不同master
erlang - 如何:使用来自不同项目的特定应用程序作为 dep
我正在尝试使用来自另一个项目 (proj2) 的 dep 编译我的应用程序 (app_1),该项目具有一些应用程序 (例如 app_a、app_b、app_c...)。
proj2 有一个应用程序文件夹,其中有上述应用程序(app_a 等)。
我正在尝试获取 app_a,但它也取决于 app_b。无论我做什么,我似乎都无法让它发挥作用。
在 app_1 的 rebar.config 中使用它:
我明白了
使用 app_a 而不是 proj2 进行类似尝试,添加 /apps/app_a 路径等都无济于事。运行 rebar3 3.12.0。
任何帮助将不胜感激。谢谢
erlang - 是否有可用于 rebar3 的插件路径自定义?
我希望将我的自定义项目作为插件添加到 rebar3.config 中。是否可以在本地获取插件还是必须来自 hex.pm?