Erlang 如何正确使用使用relx版本汇编程序构建的应用程序同步?

Erlang 如何正确使用使用relx版本汇编程序构建的应用程序同步?,erlang,cowboy,relx,Erlang,Cowboy,Relx,我想使用即时重新编译与牛仔项目组装使用relx(根据牛仔) 问题是,即使我通过在我的_application.app.src文件中提及应用程序中的同步列表,成功地在应用程序中启动同步,如下所示: {application, my_application, [ {description, "My Cowboy Application"}, {vsn, "0.1.0"}, {modules, []}, {registered, [my_app_sup]}, {

我想使用即时重新编译与牛仔项目组装使用relx(根据牛仔)

问题是,即使我通过在我的_application.app.src文件中提及应用程序中的同步列表,成功地在应用程序中启动同步,如下所示:

{application, my_application, [
    {description, "My Cowboy Application"},
    {vsn, "0.1.0"},
    {modules, []},
    {registered, [my_app_sup]},
    {applications, [
        kernel,
        stdlib,
        cowboy,
        sync
    ]},
    {mod, {my_app, []}},
    {env, []}
]}.`
我仍然无法让它工作,因为relx汇编程序没有将我的源代码移动到_rel目录(当然,它不应该)


有没有办法告诉Sync我的源文件在哪里?或者可能是我完全错了,必须以其他方式与relx进行同步集成?

我的同步开发设置包括:

  • 将同步安装到导出的ERL_LIBS路径(即
    $HOME/lib/erlang
  • 创建开发relx配置并使用
    relx-c relx-dev.config执行
  • 创建一个简单的shell脚本,将其刻录到控制台脚本所在的位置并执行它
  • 添加配置脚本以调整我的咆哮通知
在开发时,我在development relx.config文件中包含sync。然而,一旦我在一个目录中安装了sync并将其导出到ERL_LIBS,当我在我的任何erlang项目中启动sync应用程序时,它就会神奇地出现

下面是我的开发relx-dev.config文件的一个示例:

{dev_mode, true}.
{lib_dirs, ["/usr/local/erlang"]}.
{output_dir, "_rel-dev"}.
{release,
 {myapp, "0.0.1"},
 [{myapp_core, "0.0.1", '='}, sasl, syntax_tools, compiler, sync]
}.
{extended_start_script, true}.
创建relx-dev.config脚本后,我使用以下命令构建版本:

relx -c relx-dev.config
下面是我用来启动控制台的
console
脚本:

#!/usr/bin/sh
_rel-dev/myapp/bin/myapp console
此脚本将使用节点名启动erlang shell,启动所有我的应用程序和同步应用程序,并加载自定义同步配置文件

下面是一个示例
sync.config
文件,该文件位于启动shell的同一目录中:

[{sync, [{growl, [errors, warnings]}]}].

有很多关于为控制台和咆哮配置日志记录行为的信息。使用
.config
文件的替代方法包括将选项传递到
erl
命令,并在shell中执行同步功能。

如果我正确理解您的问题,您要做的是通过relx运行应用程序,并让扫描获取您对源代码所做的任何更改。如果是这样的话,下面就是你要做的

运行relx命令时,请添加-d选项

/relx-d正确

这说明relx将符号链接所有依赖项,而不是复制它们。这也使得打包过程更快。从那里开始,只需在_rel文件夹(或您将其输出到的任何地方)中运行您的应用程序,然后“同步”即可

几点注意:

1) 如果不想对所有依赖项进行符号链接,可以使用覆盖功能。然而,我很懒,总是采取要么全有要么全无的方式:)

2) 在relx.config文件中,确保包含“编译器”和语法工具作为依赖项,否则每次编辑文件时扫描都会崩溃:(

这是我的relx.config的副本,如果有帮助的话

{paths, ["apps", "deps"]}.
{lib_dirs, ["/usr/local/lib/erlang/lib", "apps", "deps"]}.
{sys_config, "./config/sys.config"}.
{release, {merigo_chat, "1.0.0"}, [
kernel,
stdlib,
syntax_tools,
compiler,
sync,
{mySampleApp, "1.0.0"},

% Debugging applications,  Need to run observer and debugger from within the package
tools,
wx,
observer,
runtime_tools,
webtool,
appmon,
debugger
]}.

% Not you can skip the overrides if you use the -d option in relx
{overrides, [
{mySampleApp, "apps/mySampleApp"},
]}.
{extended_start_script, true}.

在我的工作流程中,我只使用sync进行开发,并且要将relx生成的版本部署到我的目标生产环境中。我不清楚您希望如何在生成的版本中使用sync。如果您只是想将其用于开发,那么relx根本不必成为其中的一部分。是的,我当然希望使用sync进行开发仅供选择。很抱歉这个愚蠢的问题,你如何在开发模式下运行你的应用程序?我问这个问题是因为erlang.mk中没有
make-run
target。我刚刚发布了我的设置概述。我基本上只是使用一个shell脚本来启动应用程序,但你可能可以将它合并到一个make文件中,然后从make任务运行它。我的回答有用吗?