我想使用relx(根据Cowboy Sync)使用Cowboy项目进行动态重新编译Getting Started Guide。
问题是,即使我设法通过在my_application.app.src文件中的应用程序列表中提及同步来启动我的应用程序中的Sync,如下所示:
{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的同步集成?
答案 0 :(得分:6)
我的同步开发设置包括:
$HOME/lib/erlang
)relx -c relx-dev.config
开发时,我在我的开发relx.config文件中包含了sync。但是,一旦我在目录中安装同步并将其导出到ERL_LIBS,当我在任何一个erlang项目中启动同步应用程序时,它会神奇地出现。
以下是我的开发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]}]}].
sync README有很多关于配置控制台和咆哮的日志记录行为的信息。使用.config
文件的替代方法包括将选项传递给erl
命令并在shell中执行同步功能。
答案 1 :(得分:1)
如果我正确理解您的问题您想要做的只是通过relx运行您的应用程序,并让Scan选择您对来源所做的任何更改。如果是这样,你就是这样做的。
运行relx命令时,添加-d选项。
./ relx -d true
这就是说relx将符号链接你所有的依赖,而不是复制它们。这使得包装过程也更快。从那里只需在_rel文件夹中运行你的应用程序(或者你输出的地方)和"同步"程。
几点说明:
1)如果您不想对所有依赖项进行符号链接,则可以使用覆盖功能。然而,我很懒,做一种全有或全无的方法:)
2)在您的relx.config文件中,确保包含"编译器"每次编辑文件时,syntax_tools作为依赖项或扫描都会崩溃:(
如果有帮助
,这是我的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}.